![]() |
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? |
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! |
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... |
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:
auf das betreffende feld zurückgreifen. schöner ist es natürlich mit
dataset.fields.fields[index].value
Delphi-Quellcode:
somit erwischt du immer das richtige feld, auch wenn du die spalten in deinem dataset mal verschoben hast.
dataset.fieldbyname('feldname').asirgendwas
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: |
Re: DBGrid: Markierte Zeile Ansprechen und die Werte auslese
Zitat:
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 |
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:
Fehlermeldung beim kompilieren:
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; [Error] Umain.pas(166): Incompatible types: 'Variant' and 'TField' |
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:
also deine linke seite der paramzuweisung schaut ja ganz gut aus.
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; nur auf der rechten seite würde ich kein TField übergeben, sondern dessen inhalt, zb
Delphi-Quellcode:
dann sollte es mit den zuweisungen klappen
ZQuery1.fieldbyname('Titel').asString
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
|
Re: DBGrid: Markierte Zeile Ansprechen und die Werte auslese
Code:
Du musst auch noch das .Value bei deiner "Quelle" angeben.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] [EDITE]grayfox war schneller[/EDIT] |
Re: DBGrid: Markierte Zeile Ansprechen und die Werte auslese
:cheers: :party: so lass mich auch mal etwas vorsprung haben! :mrgreen:
|
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..
|
Re: DBGrid: Markierte Zeile Ansprechen und die Werte auslese
super, dass deine routine jetzt funktioniert!
leider kenn ich zeos nicht, somit war ich mir auch nicht sicher, ob die parameterbezeichnungen mit den feldbezeichnungen der zuweisung ident sein müssen zb :ITitel und Titel :mrgreen: und dass du das feld 'anzahl' gar nicht verwendest, das kann aber hier niemand wissen. da nützt nich mal der publikumsjoker etwas :zwinker: wünsch dir noch einen schönen sonntag! mfg, stefan ps: ein positives feed-back ist gar nicht schlecht |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:39 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 by Thomas Breitkreuz