Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi eintrag zur db hinzufügen und auslesen (https://www.delphipraxis.net/93691-eintrag-zur-db-hinzufuegen-und-auslesen.html)

ph0 9. Jun 2007 18:46

Datenbank: mysql • Version: 4.1 • Zugriff über: internet

eintrag zur db hinzufügen und auslesen
 
hallo ich verwende mysql direct.ich bin komplett neu in delphi und datenbanken bin und im netz hab ich nichts gefunden.
also: die verbindung zur datenbank (bookmarket) steht.
jz soll in die tabelle (user) die die felder id, vname, nname und tel enthält der inhalt aus
den edit feldern (vname: edit1 ... ) und id aufsteigend (+1) eingetragen werden. doch wie setze ich das um.
als zweites sollen alle einträge die bei nname und vname stehen in einer listbox ausgegeben werden ( schema: nname1, vname1
nname2, vname2)

könnt ihr mir helfen?

mkinzler 9. Jun 2007 18:58

Re: eintrag zur db hinzufügen und auslesen
 
http://www.dsdt.info/tutorials/?cat=6

ph0 9. Jun 2007 19:16

Re: eintrag zur db hinzufügen und auslesen
 
ok danke

marabu 9. Jun 2007 19:21

Re: eintrag zur db hinzufügen und auslesen
 
Hallo,

da du keinen Wert für VNAME übermittelst, diese Spalte aber mit dem constraint NOT NULL angelegt wurde, erhältst du wahrscheinlich diese Fehlermeldung (no default for column defined).

Grüße vom marabu

PS: Warum hast du den Text deines Beitrags entfernt?

ph0 10. Jun 2007 14:46

Re: eintrag zur db hinzufügen und auslesen
 
wie muss der befehl dann lauten, um mehrere enträge zu machen mit den dazugehörigen edit feldern?

mkinzler 10. Jun 2007 14:48

Re: eintrag zur db hinzufügen und auslesen
 
Was meinst du mit mehreren Einträgen?

ph0 10. Jun 2007 15:04

Re: eintrag zur db hinzufügen und auslesen
 
na in die tabelle user bei vname edit1 bei nname edit2 usw....

mkinzler 10. Jun 2007 15:06

Re: eintrag zur db hinzufügen und auslesen
 
1. Verwendenung von datensensitiven Komponenten (TDBEdit satt TEdit usw)
2. Verwendung von SQL

Wie trägst du bisher ein.

ph0 10. Jun 2007 15:33

Re: eintrag zur db hinzufügen und auslesen
 
Delphi-Quellcode:
if assigned(FResult) then
    begin
      if FMysql.Status<>MYSQL_STATUS_READY then
      begin
      ShowMessage('Ein Ergebnis wurde unvollständig gelesen!');
      FreeAndNil(FResult);
      end;
    end;
  q:='INSERT INTO `user` '+'(`nname`)'+' VALUES '+'(' + #39 + edit1.Text + #39')';
  FResult:= FMysql.query(q, true, ex);
  if assigned(FResult) then
    ShowMessage('Query: OK - Ergebnis gespeichert')
    else
    if ex then
      ShowMessage('Query: OK - ausgeführt')
      else
      ShowMessage('Query fehlgeschlagen: '+FMysql.LastError);
  end;

mkinzler 10. Jun 2007 15:41

Re: eintrag zur db hinzufügen und auslesen
 
Delphi-Quellcode:
q:='INSERT INTO `user` '+'(`nname`, `vname`, ... )'+' VALUES '+'(' + #39 + edit1.Text + #39', ' + #39 + edit2.Text + #39+ ... +')';

ph0 10. Jun 2007 16:03

Re: eintrag zur db hinzufügen und auslesen
 
ok danke klappt, kannst du mir jz auch noch sagen wie ich dann alle vor mit den dazugehörigen nachnamen in eine combobox eintragen kann??

mkinzler 10. Jun 2007 16:10

Re: eintrag zur db hinzufügen und auslesen
 
Delphi-Quellcode:
ComBoBox.Add( <Vorname> +', '+ <Nachname>);

ph0 10. Jun 2007 16:15

Re: eintrag zur db hinzufügen und auslesen
 
öhmm und die holt der sich dann so einfach aus der datenbank?? ich dachte das muss man irgendwie mit select from machen...

mkinzler 10. Jun 2007 16:25

Re: eintrag zur db hinzufügen und auslesen
 
Natürlich erst per SQL holen:
SQL-Code:
select nname, vname from <tabelle>;

DeddyH 10. Jun 2007 16:27

Re: eintrag zur db hinzufügen und auslesen
 
Hallo, ich bin in MySQL direct nicht bewandert, aber im Prinzip geht das so.
- Abfrage ausführen
SQL-Code:
SELECT Name, Vorname FROM Tabelle
- ComboBox1.Items.Clear
- Auf den ersten Datensatz positionieren
- solange nicht EOF:
-
Delphi-Quellcode:
ComboBox1.Items.Add(FieldByName('Name').AsString + ', ' + FieldByName('Vorname').AsString);
- auf nächsten Datensatz positionieren

ph0 12. Jun 2007 15:09

Re: eintrag zur db hinzufügen und auslesen
 
eben. das problem ist, dass ich die abfrage für mysql nicht hinkriege...

DeddyH 12. Jun 2007 15:11

Re: eintrag zur db hinzufügen und auslesen
 
Meinst Du nun den SQL- oder den Delphi-Code?

ph0 12. Jun 2007 15:16

Re: eintrag zur db hinzufügen und auslesen
 
Delphi-Quellcode:
  q:='Select (`nname`, `vname`)'+' From '+'(`user`)'+' WHERE '+'(`id=1`)';
  FResult:= FMysql.query(q, true, ex);
also damit geht, nur er kennt fieldbyname nicht....

DeddyH 12. Jun 2007 15:20

Re: eintrag zur db hinzufügen und auslesen
 
Versuch es mal mit FieldValueByName.

ph0 12. Jun 2007 15:23

Re: eintrag zur db hinzufügen und auslesen
 
nein auch nciht, er nimmt auch asstring nicht an.....

DeddyH 12. Jun 2007 15:28

Re: eintrag zur db hinzufügen und auslesen
 
Zitat:

Zitat von ph0
hallo ich verwende mysql direct.

Nur, dass wir uns richtig verstehen: das sind keine Komponenten, sondern Units mit Klassen (in uMySQLClient.pas, uMySQLError.pas etc.)?

ph0 12. Jun 2007 15:34

Re: eintrag zur db hinzufügen und auslesen
 
ja richtig....

DeddyH 12. Jun 2007 15:37

Re: eintrag zur db hinzufügen und auslesen
 
Dann versuch mal
Delphi-Quellcode:
FResult.FieldValueByName('Name')
Das sollte dann ein PChar sein.

//Edit: Sorry, das muss natürlich nname heißen.

ph0 12. Jun 2007 15:44

Re: eintrag zur db hinzufügen und auslesen
 
ja das kennt er und programm startet auch allerdings stoppt er jetzt hier:
Delphi-Quellcode:
      for i:=0 to fFieldsCount-1 do

DeddyH 12. Jun 2007 15:46

Re: eintrag zur db hinzufügen und auslesen
 
fFieldsCount ist eine private Property von TMysqlResult. Benutze mal FieldsCount.

ph0 12. Jun 2007 15:53

Re: eintrag zur db hinzufügen und auslesen
 
ändert sich nicht stoppt da immer noch...


Delphi-Quellcode:
begin
  result:=-1;
  if aName<>'' then
    begin
      for i:=0 to FieldsCount-1 do
        if not CaseSensitive then
          begin
            if uppercase(FieldDef(i).Name)=uppercase(aName) then
              begin
                result:=i;
                break;
              end;
          end
        else
          if FieldDef(i).Name=aName then
            begin
              result:=i;
              break;
            end;
    end;
end;

////////////////////////////////////////////////////////////////////////////////
// returns the value of a field with a specific name or nil if there is no field with that name
//note: there may be fields with nil value ... so do not take the result as there is no field with that name
function TMysqlResult.FieldValueByName(aName: string;
  CaseSensitive: boolean): pchar;
begin
  result:=FieldValue(FieldIndexByName(aName,CaseSensitive));
end;

end.
bei mir siehts so aus:
Delphi-Quellcode:
 q:='Select (`nname`, `vname`)'+' From '+'(`user`)'+' WHERE '+'(`id=1`)';
  FResult:= FMysql.query(q, true, ex);

  label19.caption:=(fresult.FieldvalueByName('nname')+ ', ' + fresult.FieldValueByName('vname'));
EDIT:wenn ich allerding das ausführe klappts....
Delphi-Quellcode:
    q:='Select (`id`)'+' From '+'(`user`)';
    FResult:= FMysql.query(q, true, ex);
    anzahl:=strtoint(fresult.FieldValueByName('id'))+1;

ph0 12. Jun 2007 16:24

Re: eintrag zur db hinzufügen und auslesen
 
áhh fehler gefunden: man kann immer nur eine sache abfragen.....aber das ist doch scheiße...

mkinzler 12. Jun 2007 16:46

Re: eintrag zur db hinzufügen und auslesen
 
Zitat:

Zitat von ph0
áhh fehler gefunden: man kann immer nur eine sache abfragen.....aber das ist doch scheiße...

Nimm halt andere Komponenten.

DeddyH 12. Jun 2007 17:43

Re: eintrag zur db hinzufügen und auslesen
 
Zitat:

Zitat von ph0
man kann immer nur eine sache abfragen.....aber das ist doch scheiße...

Das mag ich irgendwie nicht glauben. Meinst Du ein Tabellenfeld oder einen Datensatz?

marabu 12. Jun 2007 19:09

Re: eintrag zur db hinzufügen und auslesen
 
Hallo,

Delphi-Quellcode:
q:='Select (`nname`, `vname`)'+' From '+'(`user`)'+' WHERE '+'(`id=1`)';
was ist das denn für eine ulkige Syntax?

Ich würde es so versuchen:

Delphi-Quellcode:
q := Format('SELECT nname, vname FROM user WHERE id = %d', [1]);
Außerdem finde ich den Namen USER für eine Tabelle nicht sonderlich clever - es könnte sich um ein reserviertes Wort handeln.
Statt der 1 als Argument kann natürlich auch eine Integer-Variable verwendet werden.
Ansonsten zeigt das Beispiel von Martin Strohal (siehe Methode TableContent), wie man mehrere Zeilen mit mehreren Feldern abrufen kann.

Freundliche Grüße

ph0 13. Jun 2007 16:34

Re: eintrag zur db hinzufügen und auslesen
 
Hallo thx: mit
Zitat:

q := Format('SELECT nname, vname FROM user WHERE id = %d', [1]);
klappts...den andern code habe ich so im netz gefunden...thx für eure hilfe!!!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz