Autor Beitrag
lemmond1976
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Do 27.03.03 14:20 
Hallo,

ich würde gerne mit ADOQuery1.SQL.Add('..') einen Datensatz in eine SQL Datenbank schreiben. Kann mir jemand ein kleines Bsp. geben, wie ich das
mit INSERT INTO machen kann ?
Bei mir gibt es Probleme mit den Hochkommata...
Danke !

Gruss
lemmond
kiwicht
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Do 27.03.03 16:17 
willst du "externe" Variablen an deine SQL-Anweisung übergeben?
Hast du daran gedacht diese in Hochkommas zu setzen?

ausblenden Quelltext
1:
2:
query.Add ('INSERT INTO mydb SET feld1 = ' + QuotedStr(myvar));
query.ExecSQL;


(auf das QuotedStr kommts an!)

Hoffe geholfen zu haben

mfg

PS:
Du brauchst aber nur den einzusetzenden Feldinhalt so behandeln. Wenn du z.B. deinen Tabellen-Namen in einer Variable ablegst, kann der einfach so übergeben werde:
('INSERT INTO ' + dbname + ' SET feld1 = ' + QUotedStr(myvar));
lemmond1976 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Do 27.03.03 22:49 
Danke, ich werds morgen mal ausprobieren.
lemmond1976 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Do 27.03.03 22:58 
hi, kennst Du vielleicht ein paar Quellen oder Bücher, die sich mit dem Thema Delphi - ADO - MS SQL Server beschäftigen ?
Besten Dank !

Gruss
lemmond
kiwicht
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Do 27.03.03 23:09 
gern geschehen.. Bücher kann ich keine empfehlen, jedenfalls nicht was ADO-DB´s oder DB´s generell betrifft.

Alles was ich weiß, hab ich von hier ;)
lemmond1976 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Fr 28.03.03 11:59 
Jo, hat alles gut geklappt.
Kannst Du mir vielleicht noch sagen, wie man eine ID erhöhen kann ?
Das Feld weglassen kann man ja leider nicht...
VALUES(ID,'?','?'.......)
kiwicht
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Fr 28.03.03 15:05 
Du nimmst die ID des letzten (!) Feldes, und addierst 1 dazu:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var
myID : Integer;

query.Last;

myID := StrToInt(query.FiedValues['ID']); // hier kommts drauf an, ob der Feldwert aus ID gleich als Integer übergeben wird, dann kann man das StrToInt natürlich weglassen

myID := Inc(1);  // <- bin mir hierbei gerade nicht so sicher... wenns nicht geht schreib einfach myID := myID + 1 ;)

query.SQL.Text := 'INSERT INTO myDB SET id = ' + myID;

query.ExecSQL;


soweit ich informiert bin, brauch man Integer nicht in QuotedStr zu übergeben, falls es aber nicht funzt, versuchs halt mit (QuotedStr(myID))

Fertig....

Fragen? Fragen! :D
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: Sa 29.03.03 15:23 
Hi
kiwicht hat folgendes geschrieben:

Du nimmst die ID des letzten (!) Feldes, und addierst 1 dazu:
ausblenden Quelltext
1:
2:
query.Last;
...


Wenn die Abfrage aber nicht über alle Datensätze geht, bekommst du damit ein Problem.
Besser wär's die grösste verwendete ID vorher per SQL abzufragen:
ausblenden Quelltext
1:
SELECT MAX(ID) FROM MYDB					


Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
kiwicht
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Sa 29.03.03 17:11 
hm, stimmt natürlich.

mein Fehler, bei mir gehört das obligatorische "SELECT * FROM" mittlerweile schon zum Standard bevor ich INSERT oder UPDATE benutze :roll:
lemmond1976 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: So 30.03.03 17:59 
DANKE :)
lemmond1976 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Mo 31.03.03 11:15 
hi,

ich erhalte immer wieder die Meldung, daß die Operation bei geschl. Datenmenge nicht ausgeführt werden kann.
Wenn ich ein query.open hinzufüge, dann gibt es eine Zugriffsverletzung. Kannst Du mir nochmal helfen ?
Wäre nett !

Gruss
lemmond
lemmond1976 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Mo 31.03.03 18:19 
hi,

ich habe nur Probleme mit SQL unter Delphi. Deshalb mache ich die Sache jetzt mit TTable. Beim Löschen eines Datensatzes gibt es allerdings auch hier ein Problem. Gelöscht wird der Datensatz zwar, aber es kommt die Meldung, daß sich die Datenmenge nicht im Editiermodus befindet.

Table1.Edit habe ich aber angegeben. Weiß jemand, woran das liegen könnte ?
ausblenden Quelltext
1:
2:
3:
4:
Table1.open;
Table1.first;
Table1.edit;
Table1.delete;


Moderiert von user profile iconTino: Code-Tags hinzugefügt & Absätze entfernt.
kiwicht
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Mo 31.03.03 20:41 
Also zu deinem ersten Prob:

Das ist jetzt vielleicht ne bisschen blöde Antwort, weils dir nicht viel weiterhilft, aber wenn du IMMER nach dem Schema:

SQL.Text := [...]
SQL.Open

vorgehst, darf es eigentlich keine Problem geben. Ich vermute aber mal das deine Fehlermeldung dann auftritt, wenn du "spezielle" Operationen durchführst, zum Beispiel mit Exec oder Update? Deswegen warscheinlich auch dein 2. Post.

Poste einfach noch mal den Bereich, wo genau dein erster beschriebener Fehler auftritt!

Zum 2. Post:

Hey, nicht gleich aufgeben. Ich hab bei meinen Anfängen mit SQL auch sehr sehr oft verzweifelt, aber ich verspreche dir, für jedes Problem mit SQL gibt es eine Lösung, und es lohnt sich wirklich, die Mühen auf sich zu nehmen!
Zum Problem: Hast du mal versucht, die Navigations-Komponente von Delphi zu benutzen? Tritt der Fehler dort auch auf?

mfg

(sorry wenn ich keine konstruktive Hilfe leisten konnte, aber die Probleme waren erstmal zu allgemein, als das ich mit meinem Pseudo-Wissen viel hätte erreichen können)
lemmond1976 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Di 01.04.03 10:32 
hi,

Du hast mich überredet.

Ich versuche es nochmal mit sql. Eigentlich finde ich SQL ganz okay, zumindest theoretisch. Ich glaube, der eigentliche Fehler liegt darin, daß Command Text keine Ergebnismenge zurückliefert. Ich kann hiermit überhaupt nichts anfangen.

Ich weiß nur, daß SQLDataset diese Eigenschaft besitzt. Wenn ich diese Meldung ignoriere und weiterklicke, wird der erste Datensatz korrekt in die SQL-DB geschrieben, beim zweiten Mal wird der gleiche Datensatz nochmal reingeschrieben, obwohl die Variablen einen anderen Wert haben, usw.. Hier mal der Quelltext. Einiges kann sicher entfallen... Ist mehr zum Testen gedacht.
ausblenden 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:
begin
Datum := StrToDate(ComboBox2.Text);
Bildname := Bildname.Text;

ADOTable1.Open;
ADOTable1.Edit;

with ADOQuery1 do begin

open;
Last;

myID := strtoint(FieldValues['Bild_ID']);
myID := myID + 1;

close;
SQL.Clear;
SQL.Text :='INSERT INTO tbl_bild (Bild_ID, Bild_Name,Bild_AufnahmeDatum,Bild_Fotograf) VALUES('+quotedstr(inttostr(myid))+','+quotedstr(Bildname)+','+quotedstr(DateToStr(Datum))+',1)';

open;
execsql;
close;

end;
ADOTable1.Close;

end;


Moderiert von user profile iconTino: Code-Tags hinzugefügt & Absätze entfernt.
lemmond1976 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Di 01.04.03 17:48 
das Problem ist, glaube ich, daß der sql-Ausdruck statisch ist und sich zur Laufzeit nicht mehr ändert. Keine Ahnung...
lemmond1976 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Di 01.04.03 20:20 
habs jetzt einigermaßen begriffen, wie es läuft.
@kiwicht: Danke für Deine Antworten !