Autor |
Beitrag |
LowSkills
      
Beiträge: 111
Windows XP
Delphi 6 Professional
|
Verfasst: Sa 16.06.07 17:14
hi,
gibt es eine möglichkeit aus einem dbgrid einzelne felder auszulesen, ähnlich wie cells[a,b] beim stringgrid? oder alternativ eine möglichkeit ein stringgrid mit den einträgen aus dem dbgrid zu füllen?
danke im vorraus!
_________________ Verstand ist eines der am besten verteilten Güter. Jeder denkt, er hätte genug davon.
Kein Problem widersteht lange dem Angriff beharrlichen Denkens.
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Sa 16.06.07 21:00
Ich würde die Felder der dahinterliegenden Datenmenge nehmen.
_________________ Markus Kinzler.
|
|
LowSkills 
      
Beiträge: 111
Windows XP
Delphi 6 Professional
|
Verfasst: Sa 16.06.07 21:26
Also quasi das dreckelige recordset-dingsbums, nö?
Ganz ehrlich, ich hab den halben Tag damit verbracht, meinem Problem eine Lösung hinzuzuführen, aber leider mit ausbleibendem Erfolg. Und weil ich die Schleifen nicht peile, von wegen erster DS lesen, zweiter bla, versuch ich es glaub ich morgen "einfach" mal anders, so in die richtung per SQL-Tag direkt als xls speichern lassen und dann per OLE oder so excel in das Stringgrid laden.
Hoffe das ist so machbar... wird man dann ja sehn.
Schade eigentlich. Wer hatte eigentlich die Idee, ein DBGrid nur zum anzeigen zu etnwickeln? Daten ins DBGrid laden und dann damit nicht arbeiten zu können ist ja wie ins Auto steigen und nicht losfahren...
Ich muss auf alle Fälle morgen den Durchbruch schaffen. Wär ganz schön, wenn sich jetzt schon vielleicht jemand den Thread vormerken kann, und morgen im verlaufe des späten morgens mal reinschneit...
Würde mich freuen...
Vielen lieben Dank schonmal im Vorraus!
_________________ Verstand ist eines der am besten verteilten Güter. Jeder denkt, er hätte genug davon.
Kein Problem widersteht lange dem Angriff beharrlichen Denkens.
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Sa 16.06.07 23:17
Natürlich kannst du die datenbank auch in ein StringGrid laden, aber warum? Ein DBGrid ist eine Anzeigekomponente für eine DB, deshalb ist es besser auf sie selber zuzugreifen. Wenn man die Grundlagen von DB versteht ist der Zugriff auf Feldebene recht einfach.
Was hast du genau vor?
_________________ Markus Kinzler.
|
|
Agawain
      
Beiträge: 460
win xp
D5, MySQL, devxpress
|
Verfasst: Sa 16.06.07 23:40
eine Datenmenge zu durchlaufen ist doch ganz einfach.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| begin Dataset.open; Dataset.first; while not Dataset.EOF do begin showmessage(dataset.fieldvalues['Feldname']); dataset.next; end; Dataset.close; end; |
Um mal bei komischen Vergleichen zu bleiben, so wie sich das bei Dir anhöhrt, hast Du vor, von Brüssel über Timbuktu nach Paris zu fahren, oder von mir aus auch über Redmond
Gruß
Aga
|
|
LowSkills 
      
Beiträge: 111
Windows XP
Delphi 6 Professional
|
Verfasst: Mo 18.06.07 13:53
Erstmal vielen Dank für eure Mühe
Aber:
Ich bekomme das im Kopf nicht ganz hin...
Also, der moved immer im dataset weiter. Wohin?
Zeile 1 Feld 1 -> Zeile 1 Feld 2 -> [...] ->Zeile 1 Feld letztes
Zeile 2 Feld 1 -> [...]
Wenn der so springt, durchläuft er ja alle Felder, klingt ja schonmal toll, wenn es so ist.
Dann das ganze ins StringGrid schreiben funktionierte dann wie?
dataset.fieldvalues['Feldname'] <- Übergibt automatisch den Wert des in der Schleife genannten Feldes, oder?
Jetzt muss ich ja dann, wenn alles, was bisher hier festgestellt wurde stimmt, den Kram jeweils ins StringGrid schubsen...
Aber wie?
Wie bringe ich dem bei, dass ich mich gerade im Feld (Cells[x,y]) befinde? Woher weiss die Schleife dass ich jetzt in der Zeile nach rechts wandere und oder nach unten oder wo ich überhaupt gerade bin???
Ich bin gleichermßen überfragt und hilflos.
Hilfe!
Ach ja: @Agawain: Ich fahre immer über Timbuktu. Ist schön da. Gibts denn noch ne andere Route? 
_________________ Verstand ist eines der am besten verteilten Güter. Jeder denkt, er hätte genug davon.
Kein Problem widersteht lange dem Angriff beharrlichen Denkens.
|
|
noidic
      
Beiträge: 851
Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
|
Verfasst: Mo 18.06.07 13:58
Das Dataset wird zeilenweise, nicht feldweise durchlaufen.
Von einem Mechanismus wie Cell[x,y] muss man sich bei DB-Geschichten eh verabschieden, weil dort definierte Zeilenreihenfolgen eher nicht vorherrschen.
Wenn du also einen bestimmten Wert haben willst, suche per Dataset.locate den richtigen Datensatz mittels eines eindeutigen Schlüssels und frage dann das gewünschte Feld mit Dataset.FieldByName('feldname').asString o.ä. ab.
_________________ Bravery calls my name in the sound of the wind in the night...
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Mo 18.06.07 13:58
Ich verstehe immer noch nicht warum du den Umweg über das StringGrid machen willst.
Der recordzeiger steht auf dem markierten Datensatz. Ihn verscheiben kannst du mit .Prior, .Next usw.
_________________ Markus Kinzler.
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Mo 18.06.07 14:22
Um zum eigentlich Problem zurückzukommen: SQL-Anweisung 1:
| Select Marke, Farbe, Kosten from Auto oder by Marke | Inhalt im DBGrid: Quelltext 1: 2: 3: 4:
| Audi, rot, 12.000 Audi, gelb, 15.000 BMW, blau, 20.000 Toyoto, silber, 17.000 | Spalten kannst du so ansprechen Delphi-Quelltext 1: 2: 3: 4: 5:
| for i:= 0 to DbGrid1.DataSource.DataSet.RecordCount do begin showmessage('Marke: ' + dbgrid1.fields[0].asString); DBGrid1.DataSource.DataSet.MoveBy(1); end; | dann erhälst du diese Messages: Quelltext 1: 2: 3: 4:
| Audi Audi BMW Toyota | Delphi-Quelltext 1: 2: 3: 4: 5:
| for i:= 0 to DbGrid1.DataSource.DataSet.RecordCount do begin showmessage('Marke: ' +dbgrid1.fields[0].asstring + ' - Preis: ' + dbgrid1.fields[2].asString + ' Euro'); DBGrid1.DataSource.DataSet.MoveBy(1); end; | ergeben diese Meldungen Quelltext 1: 2: 3: 4:
| Marke: Audi - Preis: 12.000 Euro Marke: Audi - Preis: 15.000 Euro Marke: BMW - Preis: 20.000 Euro Marke: Toyota - Preis: 17.000 Euro | Über 0 bis x kannst du also auf die Spalten des DBGrids zugreifen und zwar in der Reihenfolge, wie du sie im Select-Statement belegst. Mit Moveby(x) sagst du deinem DBGrid, dass es den nächsten Datensatz (Zeile) markieren soll, d.h. der Zeiger steht auf der nächsten Zeile. LG Stefan
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
LowSkills 
      
Beiträge: 111
Windows XP
Delphi 6 Professional
|
Verfasst: Mo 18.06.07 14:53
Sehr fein, ich blicke langsam durch... *grübel* denke ich. Ich werds heute abend mal ausprobieren.
Wenns klappt, werd ich mich dankbar zeigen...
Dankefön!
_________________ Verstand ist eines der am besten verteilten Güter. Jeder denkt, er hätte genug davon.
Kein Problem widersteht lange dem Angriff beharrlichen Denkens.
|
|
LowSkills 
      
Beiträge: 111
Windows XP
Delphi 6 Professional
|
Verfasst: Mo 18.06.07 23:32
Hallo Ihr!
Ich muss mal groß...
groß Danke sagen
Ich habe es tatsächlich umgesetzt bekommen. Es ist erstaunlich wie easy diese Schleife zu handlen ist, aber ohne die Beispiele hier gepostet wurden, wär ich nie auf nen grünen Zweig gekommen, und jetzt (um nochmal so nen Vergleich zu bringen) sitze ich geradezu auf einem tragenden, fruchtbaren Ast!  Waaahnsinn!
Ich weiß ja nicht, ob es irgendwo hier so ne Art StepByStep Erklärung gibt, aber ich denke ich werde meine Lösung morgen nochmal für alle anderen genauestens dokumentiert hier hochladen.
Vieeeeeeeeeelen Dank an alle, @Aga, @mkinzler, @ZeitGeist87 ganz besonders und auch @noidic!
Danke! *sich tief verbeug*
_________________ Verstand ist eines der am besten verteilten Güter. Jeder denkt, er hätte genug davon.
Kein Problem widersteht lange dem Angriff beharrlichen Denkens.
|
|
Agawain
      
Beiträge: 460
win xp
D5, MySQL, devxpress
|
Verfasst: Mo 18.06.07 23:44
*hust, was heißt das jetzt?
doch alles in ein Stringgrid gepackt?
Gruß
Aga
|
|
LowSkills 
      
Beiträge: 111
Windows XP
Delphi 6 Professional
|
Verfasst: Mo 18.06.07 23:55
Agawain hat folgendes geschrieben: | *hust, was heißt das jetzt?
doch alles in ein Stringgrid gepackt?
Gruß
Aga |
Hey, nimm mir doch nicht den Wind aus den Segeln!
Ja, ich muss gestehen, dass es jetzt alles im StringGrid steht. Und: Ich kreise vor Freude um die Lampe...
Mein Kollege hat da so nen Haufen Arrays gemacht (Ich habe keine Ahnung wie die funktionieren) aber ich glaube der hat sich da genug gedanken drum gemacht... Oder auch nicht.
Fakt ist halt, dass sein Gedankliches Konstrukt auf einer Schleife in nem StringGrid basiert, wo man dann halt irgendwie so Zelle für Zelle und so. Ich denke, dass diese Vorgehensweise unseren ansprüchen genügen sollte, um die Arrays zu befüllen. Ist mit Sicherheit nicht die schönste/eleganteste Lösung aber wenns funktioniert und das System nicht übermäßig Stresst/überlastet, dann soll uns das fürs erste reichen.
Ich denke man kann behaupten, dass wir beide nicht mehr unbedingt Newbies sind, aber die Masse an Funktionen und Proceduren, Uses-irgendwas und Komponenten die ich innerhalb der letzten sechs/sieben Wochen kennengelernt habe, ist so groß, dass es unmöglich sein dürfte, die alle in Perfektion zu beherschen. Und da ich unter einem gewissen Zeitdruck stehe, reicht es mir, wenns läuft.
Weist du, wenn ich genau wüsste, wie die Arrays funktionieren und welche funktion die Verfolgen, könnte ich das mit sicherheit auch aus dem Recordset rausstricken, aber ich habe da echt nicht die Zeit, und die Lust zu, mich auch noch damit zu beschäftigen.
Aber ich denke, wenn Version1 raus ist, kann ich immernoch ein halbes Jahr weiter dran feilen, und ne revision rausbringen, nö?
Und dann komm ich auf dich zurück und lass mir das nochmal erklären. Bei nem Bier?  Super, du zahlst!
Ich denke, dass o. g. Gründe für die (vorläufige) Umsetzung durchaus akzeptabel sind, oder?
Danke auf jeden Fall, dass du dich so aufopfernd um mich (uns alle) kümmerst!
_________________ Verstand ist eines der am besten verteilten Güter. Jeder denkt, er hätte genug davon.
Kein Problem widersteht lange dem Angriff beharrlichen Denkens.
|
|
Agawain
      
Beiträge: 460
win xp
D5, MySQL, devxpress
|
Verfasst: Di 19.06.07 00:05
hehe,
so ein klärendes Wort sagt doch mal alles.
Wie gesagt, Timbuktu, Redmond oder erstmal hauptsache lüppt.
Find ich akzeptabel, hättst ja mal eher sagen können, oder?
Da haben sicher alle Verständnis für, so auch ich.
Also viel Erfolg
Und danach gehste mal richtig ran, falls das Dich dann überhaupt noch betrifft und ja, von mir aus
aber ich hoffe, Ihr habt nicht vor, was zu speichern in der DB, dann stehste nämlich morgen wieder auf der Matte, dann zahlst Du aber
Aber über die Klippen werden wir Dir wohl auch helfen...mit einem DBGrid wär das ja alles kein Problem
Gruß
Aga
|
|
|