Autor Beitrag
peppi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65


delphi 7
BeitragVerfasst: Fr 29.11.02 12:55 
Hallo,

wiedermal ich :lol:

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:

ausblenden 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 :autsch:

Wenn ihr mehr wissen müsst einfach fragen ... bin über jede Hilfe dankbar :wink:

LG Jana!
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65


delphi 7
BeitragVerfasst: 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 :lol:

LG Jana!
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Fr 29.11.02 13:16 
Nochmal ich.
Dass deine Tabelle auch tatsächlich Tabelle heisst, davon gehe ich mal aus :wink:, aber du solltest ausserdem sicherstellen, dass zwischen den einzelnen Wörtern deiner SQL tatsächlich leerzeichen stehen:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65


delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65


delphi 7
BeitragVerfasst: 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 :lol:

ausblenden volle Höhe 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:
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 :lol: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65


delphi 7
BeitragVerfasst: Fr 29.11.02 14:20 
@ udontknow

das war's ... hab die ausgewählte DB nicht zugeordnet... :lol: dachte die Zuordnung von DataSource1 würde da reichen he he

Dank dir!!