Autor Beitrag
Anuschka
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16

Windows XP Home
Delphi 5 Standard
BeitragVerfasst: Fr 26.11.04 19:08 
Ich hab da mal ne richtige Anfängerfrage.
Ich will mit Delphi auf Mysql DB zugreifen. Das klappt auch wunderbar, nun möchte ich ihm
sagen dass er daten aus 6 verschiedenen Editfeldern in die datenbank eintragen soll.

Wie gebe ich das an, dass er sich den inhalt aus den editfeldern automatisch raussucht und einträgt

?`

mysql_query = 'Insert into DB Values ';

muss ich da auch die reihenfolge der tabellen aus der db angeben? wenn ja, es kommt mir hierbei hauptsächlich auf die Syntax an. Die inhaltlichen Sachen kenne ich da ich schon mit mysql und php gearbeitet habe. nur komm ich mit der syntax bei delphi einfach nicht so ganz hin

wäre toll wenn ihr mir da helfen könntet


anuschka
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Sa 27.11.04 09:41 
Das SQL-Statement muss genauso aussehen, wie in jeder anderen Programmiersprache auch.

Auf den Inhalt der Editfelder greifst du mit Edit1.Text zu.
Anschließend machst du mysql_query.ExecSQL.

Das wars schon.
kiwicht
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Sa 27.11.04 12:54 
MySQL unterstützt zwar auch die Möglichkeit, den INSERT-Befehl ohne Angabe der Zielfelder auszuführen, ich empfehle aber der Ordnung halber trotzdem folgende Syntax:

ausblenden Quelltext
1:
INSERT INTO mydb (feld1, feld2) VALUES (value1, value2)					


Soviel dazu. Nun zur Delphi-Problematik, ganz einfach n Codeschnipsel:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
myquery.SQL.Text := ' INSERT INTO mydb ( ' +
                    ' feld1, feld2, feldn ' +
                    ' ) VALUES ( ' +
                    QuotedStr( edit1.Text ) + ', ' +
                    QuotedStr( edit2.Text ) + ', ' +
                    QuotedStr( editn.Text ) + ')';
myquery.ExecSQL;


Wenn du Strings übergeben möchtest, ist das "QuotedStr" unabdinglich. Alternativ kannst du auch das doppelte Gänsefüsschen: " SHIFT-2 verwenden im String direkt verweden. Bei Zahlen respektive Integer ist das Gänsefüsschen unwichtig.

Bsp:
ausblenden Delphi-Quelltext
1:
'"' + edit1.Text + '"';					



Beachte unbedingt die Unterschiede in der deutschen und angelsächsischen Schreibweise.
In Britannien z.B. steht ein PUNKT für das KOMMA als Trennung der Dezimalwerte. In Delphi gibt es dafür die Eigenschaft: "DECIMALSEPERATOR := '.'".
Ebenso bei den DATEN. Übergibst du '30.05.2004' an mysql, und mysql ist auf BRITISCH geconfed, ergibt das schonmal ein so futuristisches DATUM wie "30. Mai 2059" - hier einfach vorher mit einem FORMATDATETIME arbeiten :)




ki
Anuschka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16

Windows XP Home
Delphi 5 Standard
BeitragVerfasst: Sa 27.11.04 16:49 
Hi

danke erstmal für eure Hilfe. Ich hab da dennnoch nen Problem

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button1Click(Sender: TObject);
var tmp:string;
begin
     tmp:= 'INSERT INTO ´PC´ '+'(`ID`)'+ 'VALUES'+ '('''+Form1.Edit1.Text+''');';
     if mysql_query(Fmysql,tmp)=0 then
                  StatusBar1.SimpleText := 'Query send ok!'
               else
                   StatusBar1.SimpleText := 'Query error: '+FMysql.net.last_error;
end;


Wenn ich tmp:string nehme, dann meckert er in mysql_query weil er nen pchar erwartet,
mache ich tmp:pchar, dann meckert er weil er in Insert into einen String erwartet

hat einer von euch eine ahnung wie ich das ändern kann?

lg anja

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.
kiwicht
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Sa 27.11.04 17:39 
was ist FMySQL?
Anuschka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16

Windows XP Home
Delphi 5 Standard
BeitragVerfasst: Sa 27.11.04 18:09 
TMysql_Row = ^PChar;
PMysql_Rows = ^TMysql_Rows;
TMysql_Rows = record
next: PMysql_Rows;
data: TMysql_Row;
end;


ich denke da wird das problem liegen. weil hier ja bereits pchar angegeben ist. aber wie kann ich das ändern? ich glaub nicht dass die Units die ich einbinde dann noch laufen wenn ich hier das in nen string umändere

ich hab die nicht selbst geschrieben und nutze nur delphi 5 standard.
kiwicht
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Sa 27.11.04 18:21 
Versuch doch mal den String mit


ausblenden Delphi-Quelltext
1:
PChar( deinString );					


zu übergeben?
Anuschka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16

Windows XP Home
Delphi 5 Standard
BeitragVerfasst: Sa 27.11.04 18:55 
danke, damit funktionierte es leider nicht

ich hab es so gelöst:

ausblenden Quelltext
1:
2:
3:
4:
5:
var tmp:string;
    ps:pchar;

begin
tmp:='INSERT INTO `test` '+'(`ID`)'+ ' VALUES '+ '(' + #39 +  Edit1.Text +  #39 +');';


damit geht es