Laden...

Forenbeiträge von EvilTK Ingesamt 265 Beiträge

22.02.2006 - 16:15 Uhr

Ich versuch den vorschlag von Programmierhans etwas verständlicher auszudrücken.

2 DatenAdapter verwenden.

  1. DatenAdapter holt die Daten -> "SELECT * FROM Mitarbeiter INNER JOIN GJahre ON Mitarbeiter.ID=GJahre.ID";
  2. DatenAdapter updatet die Daten, "SELECT * FROM Mitarbeiter" und CommandBuilder verwenden um an die INSERT, UPDATE, DELETE Kommandos ranzukommen.

//Daten laden
adapter1.Fill( globalDataSet.Tables[0] );

//Daten speichern
adapter2.Update( globalDataSet.Tables[0] );

22.02.2006 - 16:00 Uhr

Abgesehen davon das du beim INSERT keine autoincrement id angeben musst, kannst du das ganze so unkompliziert auslesen.


OracleCommand ocmd = new OracleCommand("select MAX (ID) from TEST",conn);
int maxID = (int)ocmd.ExecuteScalar();

22.02.2006 - 15:57 Uhr

Meinst du sowas?


DataRow[] dr = dataSet.Tables[ "Table1" ].Select( "NOT (COLUMN1 IS NULL)" );

22.02.2006 - 11:37 Uhr

Original von phunkydizco
Kann ich dann trotzdem im DataSet die Zeilen selber einfügen und löschen und dann die Update()-Methode verwenden?

Ja.

Der DataAdapter macht folgendes.
Er läuft das DataSet row by row durch und überprüft den RowState. Ist der RowState "Added" wird ein INSERT ausgeführt, "Modified" -> UPDATE, "Deleted" -> DELETE.

Wie diese 3 Befehle erzeugt werden, CommandBuilder oder manuell, ist egal. Sie sollten funktionieren ^^
Ich musste die Commands noch nie selbst schreiben, daher weis ich nicht genau wie die ausehen, bezüglich primary key und parameter.

21.02.2006 - 17:21 Uhr

Gut das du die daten schon hast, DB2 sagt mir überhaupt nix. ^^
Weiter zu MySQL.

Ich selbst hab noch nie mit MySQL gearbeitet und kann dir nur schlecht weiterhelfen. Soviel ich weis brauchst du einen eigenen Connector um dich mit der Datenbank zu verbinden, am besten forumsuche verwenden, gabs bereits ein paar mal.

Wenn du mit der Datenbank verbunden bist musst du nur noch die richtigen Kommandos abschicken (INSERT, UPDATE, DELETE).

21.02.2006 - 17:01 Uhr

ich möchte eigendlich nur ein gefülltes dataset 1:1 in gleich aufgebaute tabelle einer mysql datenbank kopieren.

Wenn ich das richtig verstanden habe, existiert bereits die Tabelle in der Datenbank?

Nun es gibt jetzt 2 möglichkeiten wie du die Daten aus dem DataSet in die Datenbank bekommst.
DatenAdapter oder per hand mit (OleDb|Sql)Command. Forum suche spuckt sicher einige ergebnisse aus.

21.02.2006 - 16:43 Uhr

Die row mit ds.Status.NewStatusRow() erzeugen, befüllen und alles was null sein soll mit row.Set"Column"Null(); auf NULL setzen.


TraceDataSet.StatusRow row = ds.Status.NewStatusRow();

row.Column1 = value1;
row.Column2 = value2;
row.SetColumn3Null();
//oder wie DeveloperX vorgeschlagen hat
//row[ "Column3" ] = DBNull.Value
//aufpassen, nicht das typed Propertie verwenden.

ds.Status.Rows.Add( row );

21.02.2006 - 11:25 Uhr

Funktioniert alles so wie es soll.

Um den Value von x.State anzeigen zu können muss visual studio den get accessor aufrufen. Dabei wird der "kritische" code ausgeführt (siehe output window).

20.02.2006 - 12:06 Uhr

Die frage ob es sinnvoll ist musst du selbst beantwortet, du hast gefragt ob es geht. Meine antwort ja 🙂

Wenn du eine Exception bei einer INSERT Anweisung bekommst, liegt es daran das es nicht funktioniert hat -> doppelte Datensätze sind also "unmöglich".
Das gleiche bei UPDATE, DELETE.

20.02.2006 - 11:54 Uhr

ContinueUpdateOnError beim DatenAdapter auf true stellen und nach dem Update befehl überprüfen ob Fehler aufgetreten sind (GetErrors).
Danach TimeOut erhöhen und versuchen nochmal zu updaten. Aufpassen das es in keiner endlos schleife endet.

20.02.2006 - 11:41 Uhr

Hallo phunkydizco

Verwendest du den SqlDataAdapter Wizard (Configure DataAdapter/Konfiguriere DatenAdapter)?
Wenn ja, dann verwendest du einen CommandBuilder. Ansonsten nicht. (Dann musst du die INSERT, UPDATE, DELETE Commands selbst erstellen.)

Eine möglichkeite wäre (timeout wieder auf den default wert setzen), try/catch um die Update methode. Im catch ein dataSet.dataTable.GetErrors() aufrufen und nachsehen welche Row(s) einen Error verursacht haben. Eventuell steht in der Fehler beschreibung was genaueres drinnen als "timeout occured".

16.02.2006 - 15:34 Uhr
  1. du hast eine instanz variable und keine globale
  2. du instanzierst bei Application.Run deine form neu. Du musst deine instanzierte form übergeben. Application.Run( dieses_form );

[EDIT]

  1. Hier einen try/catch einbauen ist ganz böse. Überprüf stadessen ob das Array einen Länge von 1 oder mehr hat.
16.02.2006 - 14:58 Uhr

Im Konstruktor des MdiChilds ist der MdiParent noch nicht bekannt.


artikelVerkaufen verkaufsFormular = new artikelVerkaufen();
verkaufsFormular.MdiParent = this;
verkaufsFormular.Size = this.ClientSize;
verkaufsFormular.Show();

16.02.2006 - 12:49 Uhr

Er muss ja nur auf das args Array zugreifen. Ob die forumsuche darüber was ausspuckt 😁

Aufruf: c:\parameter\bin\Debug\parameter.exe -test


static void Main(string[] args) 
{
	if( args.Length > 0 && args[0] == "-test" )
	{
		DoSomethingUsefull();
	}
	else
	{
		//Falscher oder kein parameter übergeben
	}
}

War sowas mit dem beispiel gemeint?

16.02.2006 - 12:41 Uhr

Original von Haggy
Ich möchte, dass wenn ich die Form vergrößere sich diese Box mit vergrößert.

TextBox hat sich vergrößert ^^
Die Form hat sich nach rechts unten vergrößert -> textbox hat sich mitvergrößert.
Wenn sich die textbox nur in der breite mitvergrößern soll den Bottom Anchor rausnehmen.

16.02.2006 - 12:19 Uhr

Den Anchor erklären kann ich nicht, ich weis nur wie man ihn verwendet. herbivore kommst du kurz? 😁

Plazier eine TextBox oben links und gib dieser den Anchor Left | Top | Right (Location 32;32 oder so).
Die Applikation sollte eine Size haben die kleiner ist als deine aktuelle Auflösung. Programm starten und die form vergrößern verkleinern. Anchor in action ^^;;

16.02.2006 - 12:04 Uhr

Sieht aus als würde der AnchorStyles.Left fehlen.

Welchen Anchor haben die 2 textboxen zur zeit?

16.02.2006 - 11:57 Uhr

Vielleicht hast du folgende kleinigkeit übersehen?
Eine TextBox lässt sich in der Height nur Resizen wenn das Multiline property auf true ist.

14.02.2006 - 09:35 Uhr

.NET 1.1: Suche ich schon seit ein paar wochen oder so. Noch keine lösung in sicht.
.NET 2.0: Die Form hat ein tolles neues Propertie bekommen. RestoreBounds.

02.02.2006 - 17:01 Uhr

@talla: schlechter threadname 😁


OleDbDataReader reader = comm.ExecuteReader(); //wenn du ein SqlCommand hast, einen SqlDataReader verwenden

while( reader.Read() )
{
	int i_id = reader.GetInt32( 0 );
	string s_name = reader.GetString( 1 );
	string s_betrag = reader.GetString( 2 );
}

In deinem Fall ist die while schleife unnötig, mit reader.Read() die zeile aus der datenbank auslesen und dann mit den GetMethoden die werte auslesen.

02.02.2006 - 13:47 Uhr

FileVersionInfo liegt im namespace System.Diagnostics.

01.02.2006 - 23:46 Uhr

Wie komme ich an die Location/Size einer Form ran, wenn diese als WindowFromState nicht Normal hat.
Anders formuliert, ich möchte die Location/Size einer Form als WindowFormState.Normal, auch wenn die Form Minimized/Maximized ist.

Das ganze brauch ich als .NET 1.1 lösung, RestoreBounds (.NET 2.0) fällt also weg.

Bisheriger erfolg.
Mit folgendem Code bekomm ich die Size. Fehlt nur noch die Location. (X/Y des Rectangle sind immer -1)


Type t = new Form().GetType();
FieldInfo info = t.GetField( "restoredWindowBounds", BindingFlags.Instance | BindingFlags.NonPublic );
Rectangle rec = (Rectangle)info.GetValue( this ); //this = Form1
//jaja, das ganze kann man sicher noch schöner/richtiger programmieren. Ich bin zufrieden das es funktioniert.

31.01.2006 - 11:24 Uhr

Original von frisch
Übergib doch einfach das DataSet beim Konstruktor. Also

SecondForm meineZweite = new SecondForm(myDataSet);  

Und im Konstruktor setzt du dann einfach ein private DS mit dem übergebenen DS.

Funktioniert nur solange man das DataSet nicht im Designer verwendet, sprich DataBinding.

Das DataSet ist vom Typ Component, es wird also im InitializeComponent der Form instanziert. Wenn man das DataSet vorm InitializeComponent zuweist bringt es sich gar nicht, der Designer instanziert einfach darüber.
Weist man es nach InitializeComponent zu funktioniert das DataBinding nicht mehr, da die Controls eine andere DataSet instanz übergeben bekommen.

Eine möglichkeit wäre den DataBinding code per hand zu schreiben. Wenn es bei der einen Grid bleibt die beste option.
Oder das lokale DataSet mit dem übergebenen Mergen. Mergen funktioniert super, die sache ist nur die, wie bekommt man die geänderten Daten wieder zurück in die hauptform.

29.01.2006 - 01:27 Uhr

Amatuer antwort. 😉


Texture tex;
SurfaceDescription desc;
			
desc = tex.GetLevelDescription( 0 );
int width = desc.Width;
int height = desc.Height;

oder, funktioniert erst mit dem 2005 December release.


Texture tex;
ImageInformation info;

info = tex.ImageInformation;
int width = info.Width;
int height = info.Height;

keine gewähr, hab es selbst nur einmal gebraucht.

26.01.2006 - 09:49 Uhr

Ich hab nur bei der Klasse ContexMenuStrip eine Möglichkeit gefunden diese ImageList auszublenden. Und zwar muss man ShowImageMargin auf false stellen.
Wieso das beim MenuStrip nicht dabei ist versteh ich nicht. 🤔

20.01.2006 - 11:19 Uhr

Remote registry verwenden

Microsoft.Win32.RegistryKey key = Microsoft.Win32.RegistryKey.OpenRemoteBaseKey( Microsoft.Win32.RegistryHive.LocalMachine, "remoteComputername" );
key = key.OpenSubKey( "SOFTWARE", false ); //usw.

Datei auf remote system ausführen

//Keine ahnung
19.01.2006 - 19:29 Uhr

Da kann ich auch nicht wirklich weiterhelfen. Device instanzieren, PresentParameter definieren etc. etc. wie man es in jedem x beliebigen DirectX Tutorial findet und dann mit der Sprite klasse zeichnen.

Original von 0815Coder
ich mein, zeichnet man einen tiled hintergrund dann auch mit sprites?

Warum nicht? Mir fällt nur ein kontra Punkt ein, performance. Aber mit den heutigen grafikarten sollte das kein Problem sein.

17.01.2006 - 19:15 Uhr

Das ganze ist wahrscheinlich zu einfach für ein Tutorial 🙂

Bitmap rendern.


Sprite sprite = new Sprite( device );
Texture tex = new Texture( device, "MeineTexture.bmp" ); //Diese Überladung funktioniert nur mit dem letztem DirectXSDK (December 2005)
int color = Color.White.ToArgb();

sprite.Begin( SpriteFlags.None );
sprite.Draw( tex, Rectangle.Empty, Vector3.Empty, new Vector3( 10, 20, 0 ), color );
sprite.End();

Um die Bitmap transparent darzustellen musst du den Alpha wert der Farbe verändern (int color).

Eine Linie hab ich noch nie gezeichnet sollte aber mit der Klasse Line ganz einfach zu realisieren sein.

12.01.2006 - 19:18 Uhr

Du veränderst den RowFilter in beiden Fällen bei der gleichen DataView.

Anstatt die DefaultView zu verwenden musst du eine neue DataView instanzieren, einmal für A und einmal für B.

23.12.2005 - 20:50 Uhr

Ja

(Den Beitrag könnte man fast als spam ansehen)

Was auch geht.

row.BeginEdit();
row.EndEdit();

Setzt den RowState ebenfalls auf Modified.

22.12.2005 - 09:28 Uhr

Die Update Methode des DatenAdapter läuft das DataSet Row by Row durch und überprüft den RowState. Ist der RowState "Added" wird für die Row ein INSERT ausgeführt, Modified "UPDATE", Deleted "DELETE".
Nach einem Fill hat jede Row im DataSet den RowState Unchanged. Der DatenAdapter sieht somit keine notwendigkeit irgend ein Command auszuführen.

Lösung:
Bei daBericht das Property AcceptChangesDuringFill auf false stellen. Dann sollten alle Row den status Added haben, ist ungetestet.
Oder du instanzierst ein 2. DataSet wo du alle Rows aus dem 1. hinzufügst.

14.10.2005 - 12:09 Uhr

Das müsste dir helfen.
http://support.microsoft.com/default.aspx?scid=kb;en-us;816112

Nach jedem INSERT wird vom DatenAdapter das RowUpdated Event geworfen. Dort kannst du dann per "SELECT @@IDENTITY" oder "SELECT last_insert_id()" die ID auslesen. Die ID anschließend in die Row schreiben und AcceptChanges aufrufen.
Für genaue erklärung siehe url 😁

09.05.2005 - 17:01 Uhr

Ach herjee, uralt thread ausgraber 😁 aufs Datum deut 21.04.2004

Interesse besteht bei mir ebenfalls. Nur jemand müsste den Teamleiter spielen.

Fireworx ist seit fast einem halben jahr nicht mehr Forum gewesen der wird es wohl kaum machen 🙂

08.05.2005 - 17:52 Uhr

Schau mal unter "neue Beiträge anzeigen" bzw. verwende die forum suche.

08.05.2005 - 12:55 Uhr

Original von alexander
Diesen Fehler habe ich eben behoben. Außerdem habe ich die Beitragsbewertungsanzeige bei der Threadübersicht ausgebaut.

Mehr oder weniger.
Die spalte Bewertung ist noch vorhanden und somit ist das Design ein wenig unschön geworden 🙂

28.02.2005 - 09:52 Uhr

char.IsNumber( string val, int startPos );

IsNumber erkennt ob es eine zahl ist egal welche formatierung, komma, punkt etc. Was es nicht erkennt sind negative zahlen. Da müsstest du vorher die startPos + 1 rechnen.

15.02.2005 - 21:06 Uhr

Desweiteren füllt dataAdapter.Fill( ... ) nicht wirklich, sondern fügt hinzu. Wenn der Fill Befehl 2 mal ausgeführt wird hast du die Daten doppelt in der DataTable.

27.01.2005 - 23:45 Uhr

Am besten den DataAdapter sowie DataSet per Wizzard erstellen. Dann brauchst nur dataAdapter.Fill( dataSet.Tabelle ) fürs laden und dataAdapter.Update( dataSet.Tabelle ) fürs zurück schreiben ausführen.

Erstellst du die Objekte selbst sollte es ungefähr so ausehen.


OleDbConnection con = new OleDbConnection( ConnectionString );
DataSet dataSet = new DataSet();
OleDbDataAdapter dataAdapter = new OleDbDataAdapter( "SELECT * FROM Tabelle WHERE ID = ?", con );
OleDbCommandBuilder builder = new OleDbCommandBuilder( dataAdapter );

dataAdapter.Fill( dataSet );

//DataSet durch DataGrid bearbeiten lassen

dataAdapter.Update( dataSet );

Du instanzierst den DataAdapter nur mit dem SELECT Statement. Der CommandBuilder analysiert dieses Statement und baut daraufhin die UPDATE, INSERT und DELETE anweisung dazu, fals möglich.

26.01.2005 - 12:13 Uhr

2 Möglichkeiten.

  1. Du stellst die Docking Eigenschaft vom DataGird auf "Fill". Dann füllt das Grid die ganze Form aus. Egal ob noch was anderes auf der Form ist.
  2. Du stellst die Anchor Eigenschaft auf Left,Top,Right,Bottom. Dann verändert sich die Größe des DataGrid der Form entsprechend.
25.01.2005 - 22:56 Uhr

Den DataAdapter neu konfigurieren und das DataSet neugenerieren. Beim dataset nicht neu sondern vorhanden auswählen. Dann löscht er keine Bindungen.

20.01.2005 - 23:38 Uhr

Soweit ich weis müssen die DirectX dll speziel beim system registriert werden, ka obs stimmt oder nicht, auf jedenfall reicht es nicht aus die dlls ins anwendungsverzeichnisses zu kopieren.

2 möglichkeiten.

  1. DirectX 9.0c mit den parametern /installmanageddx installieren. Dann sollten die Managed DirectX dlls installiert werden. Bei 4 versuchen hat es 1 mal geklappt ^^
  2. Das DirectX SDK installieren, das hat bis jetzt immer funktioniert.
20.01.2005 - 23:31 Uhr

Original von Noodles
Nur eine, ich füge sie manuell hinzu, da geht nur eine. 😉
Nächste Row = neuhinzugefügte Row + 1;
Kleines Modell:

Row 1: bereits existierende Row
Row 2: die Row, die ich gerade hinzugefügt habe
Row 3: diese Row wird mir aber zurückgegeben

Ich glaube dass das Model so richtig ist.

Row 1: Spalten namen -> ID, Beschreibung, WasWeisIch
Row 2: eine Row mit den daten -> 1, "Ka", "blub"
Row 3: Neu hinzugefügte Row -> null, null, null

Beinhaltet die RowCollection oder das DataGrid eine Eigenschaft die FixedRows o.ä. heisst?

20.01.2005 - 23:22 Uhr

this.BindingContext[ dbDs, strTblAnrede ].EndCurrentEdit();
DbDa.Update(dbDs, strTblAnrede);

Der BindingContext ist für das DataBinding zuständig.
Die Methode EndCurrentEdit() schreibt die derzeit vorhanden Daten (die sich in den Steuerelementen befinden) in das DataSet.

Es könnte auch möglich sein, dass du beim BindingContext nicht das dataset + tabellennamen sondern die DataView angeben musst (dbDs.Tables[strTblAnrede].DefaultView).

21.12.2004 - 22:24 Uhr

Wahrscheinlich suchst du nach UserControls.
Dort wo du Formen/Klassen zum Projekt hinzufügst gibt es auch die UserControls.

Auf ein UserControl kannst du beliege andere WindowsFormObjekte platzieren.
Und das ganze UserControl dann auf deine eigenltiche Form ziehen, oder per code einfügen.


MyUserControl control = new MyUserControl();
control.Location = new Location( 100, 0 );
control.Size = new Size( 100, 100 );
....
this.Controls.Add( control );

08.12.2004 - 12:22 Uhr

Bitmap[] tiles = new Bitmap[10];
Bitmap tileset = new Bitmap(@".\wüste.bmp");

for( int i = 0; i < tiles.Length; i++ )
{
	tiles[i] = tileset.Clone( new Rectangle( .., .., .., .. ), System.Drawing.Imaging.PixelFormat.DontCare );
}

pictureBox.Image = tiles[0 - 10];

Ich hoffe das hilft ein wenig weiter.

22.11.2004 - 19:12 Uhr

Nur eins möchte ich anmerken... Visual SourceSafe ist nicht gerade die optimale Lösung...

Was dann ?

Läuft diese alternative auch unter Linux ? (Serverseitig)

21.10.2004 - 14:50 Uhr

Hi

Auf managed weg sehe ich da keine großen chancen.
Wenn man den Double aus den 8 Bytes errechnet wird es sehr ungenau.

Aber auf unsafe weg gehts ganz einfach.


public unsafe static double ConvertToDouble( byte[] b )
{
	fixed(byte* pointer = b)
	{
		double* d;
		d = (double*)pointer;
		return *d;
	}
}

15.10.2004 - 15:57 Uhr
Form2 form = new Form2();
form.Show(); // zeigt Die Form an und führt dann den code weiter aus
form.ShowDialog(); //zeigt die Form an und bleibt in der Methode bis die Form wieder geschlossen wurde
12.10.2004 - 21:48 Uhr

GetString müsste eine Überladung haben wo du Offset und Length mit angeben kannst. In deinem 1. Fall.
Offset 0 Length 4
Offset 5 Length n

Du könntest es aber genauso wie das notepad machen und die 0 einfach mit einer 32 (leerzeichen) ersetzen.

12.10.2004 - 21:45 Uhr

Das Property "FileName" sollte den ganzen pfad der Datei haben, und "FileNames" fals MultiSelect erlaubt ist.

Aus dem C:\UNIWISE.EXE brauchst du kein C:\UNIWISE.EXE machen 😉 Die haben automatisch ein @ vorne dran. (Oder sowas ähnliches aufjeden fall funktioniert es)