Entwickler-Ecke

Datenbanken - Datensatz suchen und ändern


bobi - Fr 22.06.07 10:05
Titel: Datensatz suchen und ändern
Hi, wenn ich bei einer Oracle SQL Abfrage alle Daten wieder in die verschiedenen TextBoxen schreiben will, wie kann ich das am besten realisieren?

Das was da jetzt rauskommen würde, möchte ich gerne wieder in meine TextBoxen schreiben.

Mein Erster Versuch


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
procedure TWinForm_Inventar_Suche.Button3_Click(sender: System.Object; e: System.EventArgs);
 var rw : DataRow;
begin
  oda:=OracleDataAdapter.Create('Select * from '+db1+' where systemname '+TextBox1.Text, conn);
  ocb:=OracleCommandBuilder.Create(oda);
  ds := DataSet.Create (db1);

  ds.Clear;
  conn.Open;
  oda.Fill(ds, db1);
  dt := ds.Tables [db1];
  conn.Close;

  TextBox1.Text := ['Systemname'];
  TextBox2.Text := ['Benutzer'];
  TextBox3.Text := ['Inventarnr'];
  TextBox4.Text := ['Standort'];
  TextBox5.Text := ['Abteilung'];
  TextBox6.Text := ['Raum'];
  TextBox7.Text := ['Produkt'];
  TextBox8.Text := ['Hersteller'];
  TextBox9.Text := ['Seriennummer'];
  TextBox10.Text := ['Lieferant'];
  TextBox11.Text := ['Lieferdatum'];
  RichTextBox1.Text := ['Bemerkung'];
  TextBox12.Text := ['Leasingbeginn'];
  TextBox13.Text := ['Leasingende'];
  TextBox14.Text := ['Leasingnr'];
end;


MFG: bobi


JensLaskowski - Fr 22.06.07 16:52

Benutze doch mal die Methode FieldByName

Dies würde dann so aussehen:


Delphi-Quelltext
1:
TextBox1.Text := Query.FieldByName('Systemname').AsString;                    


Dann müsste es eigentlich gehen.

Mit freundlichen Grüßen
JensLaskowski


bobi - Mo 25.06.07 09:29

Das habe ich jetzt mal versucht, aber dabei entsteht ein weiteres Problem.

Sobald ich nun eine Abfrage starte und diese dann halt in die einzelnen TextBoxen schreiben möchte ( mit diesen Befehl) kommt diese Fehlermeldung:

„Exception-Klasse System.NullReferenceException mit Meldung ‚Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.’“


JensLaskowski - Mo 25.06.07 13:05

Könntest du mal den Code posten, dann kann ich das auch nachvollziehen.

Mit freundlichen Grüßen
JensLaskowski


bobi - Mo 25.06.07 13:08


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
procedure TWinForm_Inventar_Suche.Button3_Click(sender: System.Object; e: System.EventArgs);
begin
  oda:=OracleDataAdapter.Create('Select * from '+db1+' where systemname ='+hk+TextBox1.Text+hk, conn);
  ocb:=OracleCommandBuilder.Create(oda);
  ds := DataSet.Create (db1);

  ds.Clear;
  conn.Open;
  oda.Fill(ds, db1);
  dt := ds.Tables [db1];
  conn.Close;

  TextBox1.Text := Query.FieldByName('Systemname').AsString;
  TextBox2.Text := Query.FieldByName('Benutzer').AsString;
  TextBox3.Text := Query.FieldByName('Inventarnr').AsString;
  TextBox4.Text := Query.FieldByName('Standort').AsString;
  TextBox5.Text := Query.FieldByName('Abteilung').AsString;
  TextBox6.Text := Query.FieldByName('Raum').AsString;
  TextBox7.Text := Query.FieldByName('Produkt').AsString;
  TextBox8.Text := Query.FieldByName('Hersteller').AsString;
  TextBox9.Text := Query.FieldByName('Seriennummer').AsString;
  TextBox10.Text := Query.FieldByName('Lieferant').AsString;
  TextBox11.Text := Query.FieldByName('Lieferdatum').AsString;
  RichTextBox1.Text := Query.FieldByName('Bemerkung').AsString;
  TextBox12.Text := Query.FieldByName('Leasingbeginn').AsString;
  TextBox13.Text := Query.FieldByName('Leasingende').AsString;
  TextBox14.Text := Query.FieldByName('Leasingnr').AsString;
end;


JensLaskowski - Mo 25.06.07 18:18

user profile iconbobi hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
procedure TWinForm_Inventar_Suche.Button3_Click(sender: System.Object; e: System.EventArgs);
begin
  oda:=OracleDataAdapter.Create('Select * from '+db1+' where systemname ='+hk+TextBox1.Text+hk, conn);
  ocb:=OracleCommandBuilder.Create(oda);
  ds := DataSet.Create (db1);

  ds.Clear;
  conn.Open;
  oda.Fill(ds, db1);
  dt := ds.Tables [db1];
  conn.Close;

  TextBox1.Text := Query.FieldByName('Systemname').AsString;
  TextBox2.Text := Query.FieldByName('Benutzer').AsString;
  TextBox3.Text := Query.FieldByName('Inventarnr').AsString;
  TextBox4.Text := Query.FieldByName('Standort').AsString;
  TextBox5.Text := Query.FieldByName('Abteilung').AsString;
  TextBox6.Text := Query.FieldByName('Raum').AsString;
  TextBox7.Text := Query.FieldByName('Produkt').AsString;
  TextBox8.Text := Query.FieldByName('Hersteller').AsString;
  TextBox9.Text := Query.FieldByName('Seriennummer').AsString;
  TextBox10.Text := Query.FieldByName('Lieferant').AsString;
  TextBox11.Text := Query.FieldByName('Lieferdatum').AsString;
  RichTextBox1.Text := Query.FieldByName('Bemerkung').AsString;
  TextBox12.Text := Query.FieldByName('Leasingbeginn').AsString;
  TextBox13.Text := Query.FieldByName('Leasingende').AsString;
  TextBox14.Text := Query.FieldByName('Leasingnr').AsString;
end;


Wenn ich das so richtig sehe, holst du dir die Daten mit einem DataSet aus der Tabelle. Oder teusche ich mich da??

Wenn das so ist, musst du Query durch den Namen deines DataSets ersetzen. Was anderes fällt mir jetzt auf die schnelle nicht auf.

Das Query war nur ein Beispiel von mir.

Mit freundlichen Grüßen
JensLaskowski


bobi - Di 26.06.07 08:26

Also ich habe das dann mal mit dem DataSet versucht, es will einfach nicht funktionieren.

Wenn ich ganz normal meinen DataSet nehme, kennt er keine FieldByName und wenn ich TDataSet schreibe, bekomme ich nur eine Fehlermeldung:

„Diese Form des Methodenaufrufs ist nur für Klassenmethoden erlaubt“



Ich weiß da in Moment nicht weiter.




Mit freundlichen Grüßen: bobi


jasocul - Di 26.06.07 09:42

@Jens:
bobi programmiert mit .NET. Die DataSets sind dort anders zu handhaben.

@bobi:
Schau Dir doch erstmal die Hilfe zu den DataSets an. Ich meine, dass dort auch Beispiele sind.
Hier noch ein Buchtipp:
http://www.jasocul.de/html/delphi_2005.html

Datenbanken mit .NET sind einfach zum Kotzen und nicht zu empfehlen


bobi - Di 26.06.07 11:12

Erstmal danke für die Hilfe, ich glaube sonst würde ich langsam am Rad drehen.

Ja das es bei .NET ein wenig anders ist, habe ich dann auch feststellen müssen.

Ich habe das Problem jetzt ein wenig anders gelöst, zum sieht es so aus als würde es so funktionieren.


Ich habe zwar jetzt noch ein anderes Problem, aber ich denke mal das liegt an etwas anderem.



MFG: bobi


bobi - Mi 27.06.07 10:16

Nach lagen hin und her habe ich dann doch endlich die richtige Lösung gefunden, ich habe sie mir mehr oder weniger zusammengebastelt.

Für das Archiv wollte ich diese mal hier Posten, falls noch weitere Leute das gleiche Problem haben.



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
procedure TWinForm_Inventar_Suche.Button4_Click(sender: System.Object; e: System.EventArgs);
begin
  oda:=OracleDataAdapter.Create('Select * from '+db1+' where inventarnr ='+hk+TextBox3.Text+hk, conn);
  ocb:=OracleCommandBuilder.Create(oda);
  ds := DataSet.Create (db1);

  ds.Clear;
  conn.Open;
  oda.Fill(ds, db1);
  dt := ds.Tables [db1];
  conn.Close;

  TextBox1.Text := dt.Rows[0]['Systemname'as String;
  TextBox2.Text := dt.Rows[0]['Benutzer'as String;
  TextBox3.Text := dt.Rows[0]['Inventarnr'as String;
  TextBox4.Text := dt.Rows[0]['Standort'as String;
  TextBox5.Text := dt.Rows[0]['Abteilung'as String;
  TextBox6.Text := dt.Rows[0]['Raum'as String;
  TextBox7.Text := dt.Rows[0]['Produkt'as String;
  TextBox8.Text := dt.Rows[0]['Hersteller'as String;
  TextBox9.Text := dt.Rows[0]['Seriennummer'as String;
  TextBox10.Text := dt.Rows[0]['Lieferant'as String;
  TextBox11.Text := dt.Rows[0]['Lieferdatum'as String;
  RichTextBox1.Text := dt.Rows[0]['Bemerkung'as String;
  TextBox12.Text := dt.Rows[0]['Leasingbeginn'as String;
  TextBox13.Text := dt.Rows[0]['Leasingende'as String;
  TextBox14.Text := dt.Rows[0]['Leasingnr'as String;
end;



MFG: bobi