| Autor |
Beitrag |
Xong
      
Beiträge: 113
WIN 2000
Borland Developer Studio 2006
|
Verfasst: Mo 14.01.08 14:52
Hallo,
ich habe mit ADO eine DB-Verbindung aufgestellt. Ein mit einer Tabelle und darin enthaltenden Feld verbundenes DBEdit-Feld speichert bei einem Eintrag sofort den geänderten Wert.
Wie kann ich das verhindern?
Wie kann ich also realisieren, dass die Datenbank nur auf Knopfdruck aktualisiert wird? (Wollen Sie den Eintrag wirklich ändern? JA | NEIN)
Danke für eure Hilfe,
Robert
|
|
Mike19
      
Beiträge: 256
Win XP, Vista, Win 7
Delphi 2005, Turbo Delphi
|
Verfasst: Mo 14.01.08 15:34
Hallo,
nimm doch einfach nur ein Edit Feld. Das ist nicht direkt mit der Datenbank verbunden. Änderungen werden dann erst auf die Anweisung Post vollzogen und das lässt sich steuern.
Gruß Micha
|
|
Xong 
      
Beiträge: 113
WIN 2000
Borland Developer Studio 2006
|
Verfasst: Mo 14.01.08 16:16
Okay,
das ist wahrscheinlich sowieso die beste Lösung. Das mit dem Editieren habe ich auch hinbekommen.
Wie kann ich aber den Rückgabewert einer SELECT-Anweisung in solch einem Edit-Feld anzeigen?
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| with StartForm.ADOQuery1 do begin with SQL do begin Clear; Add('SELECT *'); Add('FROM foo'); Add(Format('WHERE ID=''%d''',[bar]); end; Open; end; |
Wie komme ich an das Resultat einer SELECT-Anweisung?
Mit welchen Komponenten kann ich arbeiten?
Danke, Robert
|
|
Mike19
      
Beiträge: 256
Win XP, Vista, Win 7
Delphi 2005, Turbo Delphi
|
Verfasst: Mo 14.01.08 17:03
Hallo,
wie das in SQL geht kann ich Dir nicht sagen, ich hätte es mit einer Table gemacht.
|
|
Xong 
      
Beiträge: 113
WIN 2000
Borland Developer Studio 2006
|
Verfasst: Mo 14.01.08 17:19
Ich habe es jetzt folgendermaßen hinbekommen:
Ich habe ein neues ADODataSet mit dem Namen AbfrageDataSet angelegt.
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| with StartForm.AbfrageDataSet do begin Active := False; CommandText := Format('SELECT * FROM foo WHERE ID=''%d''',[bar]); Active := True; with Recordset.Fields do begin // Über Item['Spaltenname'] kann ich jetzt auf die einzelnen Felder zugreifen. // (Und sie ggf. einem Editfeld zuordnen.) // Natürlich geht das nur, wenn nur ein Datensatz existiert. // Bei mehreren Datensätzen muss man den Cursor weitersetzen (Next) end; end; |
Kennst du eine elegantere Methode?
Wie löst man das mit einer Tabelle?
|
|
Mike19
      
Beiträge: 256
Win XP, Vista, Win 7
Delphi 2005, Turbo Delphi
|
Verfasst: Mo 14.01.08 17:24
Hallo,
bei einer Table würde ich mit Locate oder Find genau den Datensatz auswählen, den ich brauche und dann das entsprechende Feld mit
z.B.
Edit1.Text:= Table1.FieldByName('...').As String
anzeigen lassen.
Gruß Micha
|
|
raiguen
      
Beiträge: 374
WIN 2000prof, WIN XP prof
D7EP, MSSQL, ABSDB
|
Verfasst: Mo 14.01.08 20:51
Ob nun Table oder Query, in beiden Fällen kann man EditFelder (vorzugsweise) im AfterScroll mit den entsprechenden Feldwerten befüllen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure Query1AfterSroll(DataSet: TDataSet);
begin Edit1.Text := DataSet.FieldByName('Bla').Text; Edit2.Text := DataSet.FieldValues['dumdidum']; EditXYZ.Text := DataSet.FieldByName('irgendwas').Value; ... end; |
|
|
Xong 
      
Beiträge: 113
WIN 2000
Borland Developer Studio 2006
|
Verfasst: Di 15.01.08 09:48
Danke!
Ihr habt mir sehr weiter geholfen!
Bis bald,
Robert =)
|
|