Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBGrid: Markierte Zeile Ansprechen und die Werte auslesen (https://www.delphipraxis.net/21869-dbgrid-markierte-zeile-ansprechen-und-die-werte-auslesen.html)

yankee 9. Mai 2004 12:14


DBGrid: Markierte Zeile Ansprechen und die Werte auslesen
 
Ich will, dass der User auf eine Zeile in 'nem DBGrid doppelt draufklickt (ich nehme also ein OnDblClick Event) und ich aus der Zeile alle Werte in Variablen eingelesen werden.
Die Zeile, auf die der User drauf klickt, wird dann ja wohl markiert sein, also kann ich die damit wahrscheinlich ansprechen, aber wie? Und wie hole ich mir dann die Werte aus den einzelnen Spalten in der Zeile?

r_kerber 9. Mai 2004 12:27

Re: DBGrid: Markierte Zeile Ansprechen und die Werte auslese
 
Hallo yankee,

zunächst sei erst mal die Frage erlaubt, ob Du die Suchfunktion der DP schon kennst. Deine Fragen wurden teilweise schon desöfteren hier diskutiert.
Wenn Du im DBGrid auf eine Zeile klickst, dann wird auch gleich der Zeiger im TTable bzw. TQuery auf diesen Datensatz gesetzt. Und darüber hast Du dann auch den Zugriff auf die einzelnen Daten. Schau mal unter FieldByName in die OH. Da gibt es IMHO auch ein Code-Beispiel!

yankee 9. Mai 2004 12:30

Re: DBGrid: Markierte Zeile Ansprechen und die Werte auslese
 
sry, ich habe die Suche ja mal verwendet... Aber ich habe nur 30 Seiten Schmarn bekommen, der nicht zum Thema passte. Es eben auch schwierig, einen vernünftigen Suchbefehl zu finden, wenn man so ungenau weiß, was man eigentlich will.
Das mit der TQueryKompo werde ich mal ausprobieren...

grayfox 9. Mai 2004 12:34

Re: DBGrid: Markierte Zeile Ansprechen und die Werte auslese
 
hallo yankee!

deine frage wurde hier im forum schon bis zum abwinken behandelt ;)
also gut, dann nochmal:
hinter deinem dbgrid liegt ein dataset, aus welchem die datensätze kommen, die im dbgrid angezeigt werden. durchs anklicken einer zeile in deinem dbgrid wird der dahinterliegende datensatz zum aktiven datensatz und du kannst im einfachsten fall mit

Delphi-Quellcode:
dataset.fields.fields[index].value
auf das betreffende feld zurückgreifen. schöner ist es natürlich mit
Delphi-Quellcode:
dataset.fieldbyname('feldname').asirgendwas
somit erwischt du immer das richtige feld, auch wenn du die spalten in deinem dataset mal verschoben hast.
dataset entspricht jener komponente, mit deren hilfe du das dbgrid füllst (table oder query)

mfg, stefan

//edit: oops! der kollege r_kerber war schon wieder mal schneller :mrgreen:

grayfox 9. Mai 2004 12:41

Re: DBGrid: Markierte Zeile Ansprechen und die Werte auslese
 
Zitat:

Es eben auch schwierig, einen vernünftigen Suchbefehl zu finden,
versuchs mal mit locate, lookup, gotokey, findfirst, filter, select...
möglichkeiten gibts genug, es kommt nur drauf an, ob du in indizierten feldern, nichtindizierten feldern, nach einem oder mehreren suchbegriffen suchen willst.
nach ein paar detailierteren infos deinereits könnte man dir bestimmt ein paar nützliche tipps geben.

mfg, stefan

yankee 9. Mai 2004 12:48

Re: DBGrid: Markierte Zeile Ansprechen und die Werte auslese
 
Also mal ein paar mehr Hintergründe:
Ich habe zwei MySQL-Tabellen. In einer sind lauter Bücher drin. In der anderen die die Bestellten Bücher. Die Bücher werden in einem DBGrid angezeigt. Wenn der User jetzt auf eine Zeile doppelt draufklickt, soll das entsprechende Buch mit allen dazugehörigen Daten in eine zweite MySQL-Tabelle hinzugefügt werden, wo eban alle Bestellten Bücher drinstehen. Ich habe das mal jetzt mal so versucht:

Delphi-Quellcode:
    ZQuery2.SQL.Text :='INSERT INTO `bestellungen` ( `Titel` , `Anzahl` , `Lehrer` , `Verlag` , `Bestellnr` , `Preis` )' +#10+
                       'VALUES (:ITitel, :IAnzahl, :ILehrer, :IVerlag, :Bestellnr, :Preis)';
    ZQuery2.ParamByName('Titel').Value :=ZQuery1.fieldbyname('Titel');
    ZQuery2.ParamByName('Anzahl').Value :=ZQuery1.fieldbyname('Anzahl');
    ZQuery2.ParamByName('Lehrer').Value :=ZQuery1.fieldbyname('Lehrer');
    ZQuery2.ParamByName('Verlag').Value :=ZQuery1.fieldbyname('Verlag');
    ZQuery2.ParamByName('Bestellnr').Value :=ZQuery1.fieldbyname('Bestellnr');
    ZQuery2.ParamByName('Preis').Value :=ZQuery1.fieldbyname('Preis');
    ZQuery2.ExecSQL;
Fehlermeldung beim kompilieren:
[Error] Umain.pas(166): Incompatible types: 'Variant' and 'TField'

grayfox 9. Mai 2004 13:01

Re: DBGrid: Markierte Zeile Ansprechen und die Werte auslese
 
hallo yankee!

bevor ich einen unsinn rede, hab ich noch schnell in die delphi-hilfe geschaut und dort folgendes gefunden:

Delphi-Quellcode:
  Query1.ParamByName(‘Capital’).AsString := Edit1.Text;
Derselbe Quelltext würde bei Verwendung der Eigenschaft Params mit dem Index 1 (der Parameter Capital ist der zweite Parameter in der SQL-Anweisung) folgendermaßen aussehen:
  Query1.Params[1].AsString := Edit1.Text;
also deine linke seite der paramzuweisung schaut ja ganz gut aus.
nur auf der rechten seite würde ich kein TField übergeben, sondern dessen inhalt, zb

Delphi-Quellcode:
  ZQuery1.fieldbyname('Titel').asString
dann sollte es mit den zuweisungen klappen

mfg, stefan

ps: wieso übergibts du überhaupt variante in diesem fall? das macht doch nur sinn, wenn man felder über eine schleife füllt. zb:

Delphi-Quellcode:
  zieltable.fields.fields[i].value:= quelltable.fields.fields[i].value

Sharky 9. Mai 2004 13:05

Re: DBGrid: Markierte Zeile Ansprechen und die Werte auslese
 
Code:
 
    ZQuery2.SQL.Text :='INSERT INTO `bestellungen` ( `Titel` , `Anzahl` , `Lehrer` , `Verlag` , `Bestellnr` , `Preis` )' +#10+
                       'VALUES (:ITitel, :IAnzahl, :ILehrer, :IVerlag, :Bestellnr, :Preis)';
    ZQuery2.ParamByName('Titel').Value :=ZQuery1.fieldbyname('Titel')[color=red].Value[/color];
 ...
    ZQuery2.ExecSQL;[/delphi]
Du musst auch noch das .Value bei deiner "Quelle" angeben.

[EDITE]grayfox war schneller[/EDIT]

grayfox 9. Mai 2004 13:09

Re: DBGrid: Markierte Zeile Ansprechen und die Werte auslese
 
:cheers: :party: so lass mich auch mal etwas vorsprung haben! :mrgreen:

yankee 9. Mai 2004 13:12

Re: DBGrid: Markierte Zeile Ansprechen und die Werte auslese
 
Thx, nachdem ich noch ein paar flüchtigkeitsfehler rausgemacht habe (in den params habe ich das I vergessen und die Spalte Anzahl gibt es noch nicht, da muss der User erst 'ne Eingabe durchführen *g* funzt es jetzt..


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:35 Uhr.
Seite 1 von 2  1 2      

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