Autor |
Beitrag |
peppi
      
Beiträge: 65
delphi 7
|
Verfasst: Fr 29.11.02 12:55
Hallo,
wiedermal ich
versuche krampfhaft Daten in meine DB einzufügen. Hierfür sollen die Daten aus verschiedenen Edit-Feldern genommen werden. Das soll über eine Query laufen wenn ich auf einen Button klicke... der Quellcode hierfür:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm2.Button1Click(Sender: TObject); begin with Query2 do begin close; with SQL do begin clear; ADD ('insert into tabelle'); ADD ('(NUMMER)'); ADD ('values (' + QuotedStr(Edit1.Text)+')'); end; query2.open; end; end; |
Also wie man sieht, soll aus Edit1 der Text genommen werden und in die DB eingefügt werden. Probeweise hab ich's erstmal nur für ein Feld gemacht. Wenn ich jetzt auf den Button klicke bekomme ich immer die Fehlermeldung:
"Ungültiger Dateiname" ... womit könnte das zusammenhängen?? Ich flipp noch aus
Wenn ihr mehr wissen müsst einfach fragen ... bin über jede Hilfe dankbar
LG Jana!
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Fr 29.11.02 13:00
Hi
Wenn die SQL Anweisung deiner Query keine Ergebnismenge liefert (Insert, Update usw.) musst du anstelle von Open die Methode ExecSQL aufrufen.
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
peppi 
      
Beiträge: 65
delphi 7
|
Verfasst: Fr 29.11.02 13:13
Hi Lothar,
wäre ja zu schön gewesen
Ich hab jetzt einfach das open durch ExecSQL ersetzt ... mehr nich. So meintest du das doch oder?? Bekomme aber den gleichen Fehler bei ButtonClick.
vielleicht muss ich etwas genauer werden. Die Query2, die das insert ja ausführen soll, habe ich mit einer DataSource1 verbunden. In dieser ist Dataset = Query1. Und mit dieser Query1 selektiere ich schon im Vorfeld Daten. Die Daten werden dann in verschiedenen DBEditFeldern angezeigt. Das klappt auch ... seh ja die Daten. Aber kann das manchmal auch an dieser Verbindung liegen?? Will jetzt hier erstmal nich den ganzen Quellcode einstellen
LG Jana!
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Fr 29.11.02 13:16
Nochmal ich.
Dass deine Tabelle auch tatsächlich Tabelle heisst, davon gehe ich mal aus  , aber du solltest ausserdem sicherstellen, dass zwischen den einzelnen Wörtern deiner SQL tatsächlich leerzeichen stehen:
Quelltext 1: 2: 3:
| ADD ('insert into tabelle'); ADD (' (NUMMER)'); //1. Zeichen Space ADD (' values (' + QuotedStr(Edit1.Text)+')'); //1. Zeichen Space |
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
peppi 
      
Beiträge: 65
delphi 7
|
Verfasst: Fr 29.11.02 13:34
Ist es nicht so das mit ADD auch eine neue Zeile im SQL beginnt?? Das dachte ich jedenfalls immer, dann bräuchte ich doch auch kein Leerzeichen?? Ich finde in der Online-Hilfe auch nicht wirklich was darüber ... Leerzeichen sind klar ... ' ' ...aber so meintest du das doch bestimmt nicht oder??
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Fr 29.11.02 13:55
Hi
Zitat: |
Ist es nicht so das mit ADD auch eine neue Zeile im SQL beginnt??
|
Das schon, aber wenn die SQL-Anweisung an die Datenbank übergeben wird, igoniert die einfach den Zeilenumbruch und dann kleben die einzelnen Wörter direkt aneinander.
Irgendwie haben sich vorhin unsere Beiträge überschnitten. Welche Query verwendest du denn jetzt um die Daten anzuzeigen? Wenn du versuchst dieselbe Query zum Anzeigen und zum Löschen zu verwenden, müsstest du ja nach dem Löschen wieder die SQL-Anweisung für die Anzeige erstellen.
Wenn du die Query2 nur zum löschen verwendest, dann würde ich den Eintrag in DataSource mal rausnehmen. Ich weiss zwar nicht, ob das nun konkret was ausmacht, aber sinnlos ist es auch jeden Fall, da du die zu löschenden Sätze ja sowieso per SQL selektierst.
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
peppi 
      
Beiträge: 65
delphi 7
|
Verfasst: Fr 29.11.02 14:14
Hab den Eintrag jetzt mal raus genommen ... selbe Fehlermeldung ... ich kopier jetzt mal den ganzen Quellcode ... ist dann vielleicht einfacher
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: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77:
| procedure TForm2.FormCreate(Sender: TObject); begin Session.GetAliasNames(ComboBox1.Items); end;
procedure TForm2.ComboBox1Change(Sender: TObject); begin Database1.Close; query1.Active := false; With ComboBox1 Do If DataBase1.AliasName = ComboBox1.Items[ItemIndex] then Exit else begin Database1.AliasName := ComboBox1.Items[ItemIndex] end; with Query1 do begin close; with SQL do begin clear; ADD('select * from tabelle2'); ADD('where NUMMER LIKE ' + QuotedStr(Edit2.Text + '%')); ADD('and NUMMER2 LIKE ' + QuotedStr(Edit1.Text + '%')); Add ('order by NUMMER'); end; Query1.DatabaseName := Database1.AliasName; Query1.Active := True;
end; end;
procedure TForm2.Edit2KeyPress(Sender: TObject; var Key: Char); begin if not (key in ['0'..'9',#8,'.','-']) then Key := #0; with Query1 do begin close; with SQL do begin clear; ADD('select * from tabelle2'); ADD('where NUMMER LIKE ' + QuotedStr(Edit2.Text + '%')); ADD('and NUMMER2 LIKE ' + QuotedStr(Edit1.Text + '%')); Add ('order by NUMMER'); end; Query1.Open; end; end;
procedure TForm2.Edit2Enter(Sender: TObject); begin with Query1 do begin close; with SQL do begin clear; ADD('select * from tabelle2'); ADD('where NUMMER LIKE ' + QuotedStr(Edit2.Text + '%')); ADD('and NUMMER2 LIKE ' + QuotedStr(Edit1.Text + '%')); Add ('order by NUMMER'); end; Query1.Open; end; end;
procedure TForm2.Button1Click(Sender: TObject); begin with Query2 do begin close; with SQL do begin clear; ADD ('insert into tabelle'); ADD ('(NUMMER2)'); ADD ('values (' + QuotedStr(Edit1.Text)+')'); end; query2.ExecSQL; end; end; end. |
Die SQL-Anweisung muss bestimmt nich in jede Prozudur rein  das wollt ich noch ändern, also einfach nicht drauf achten (es sei denn, es hat mit dem Fehler zu tun  )
Natürlich heißen meine tabellen nicht tabelle1 und tabelle, das hab ich nur wegen Datenschutz geändert, in MEINEM Quellcode sind die richtig.
So, hoffe du kannst damit was anfangen!!
LG Jana!
|
|
Udontknow
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: Fr 29.11.02 14:15
Hi.
Kannst du Daten per Select durch eine weitere DS und deiner Query2 einfach in einem Grid anzeigen lassen? Die Fehlermeldung klingt ja so, als ob evtl die DB-Einstellung inkorrekt ist, und beim Öffnen der Query wird ja evtl. auch erst die DB geöffnet... Also, vielleicht mal den databasename in Query2 checken...
Cu,
Udontknow
|
|
peppi 
      
Beiträge: 65
delphi 7
|
Verfasst: Fr 29.11.02 14:20
@ udontknow
das war's ... hab die ausgewählte DB nicht zugeordnet...  dachte die Zuordnung von DataSource1 würde da reichen he he
Dank dir!!
|
|