[C++] MySQL-Datensätze verarbeiten

*cerox*

Lt. Commander
Registriert
Feb. 2005
Beiträge
1.357
Hallo zusammen,

ich verwende den Borland C++ Builder und habe mit einem TDatabase-Objekt sowie dem MySQL ODBC Connector Treiber eine Verbindung mit meinem lokalen MySQL-Datenbankserver aufgebaut.

Bis jetzt habe ich nur Statements abgesetzt und keine Abfragen an die Datenbank geschickt; z.B. habe ich so eine Tabelle erstellt:

Code:
Query1->Active=false;
Query1->SQL->Clear();
Query1->SQL->Add("CREATE TABLE blub (spalten...)");

Das funktioniert auch soweit; nun möchte ich die Daten abfragen (SELECT * FROM tabelle reicht in meinem Fall, da ich alle Attribute benötige).

In PHP habe ich das mit mysql_fetch_array erledigt; jetzt suche ich was entsprechendes beim C++ Builder. Ich habe auch schon versucht, die Methode ParamByName vom TQuery-Objekt zu verwenden, leider jedoch erfolglos.

Kann mir jemand helfen?
 
Query1->Open;
DataSource1->DataSet = Query1;
DataGrid1->DataSource = DataSource1;

So in etwa - aus dem Gedächtnis...

VCL ist bei mir Ewigkeiten her, ich bin jetzt mehr bei C#.net gelandet. :-)
 
Zuletzt bearbeitet: (Berichtigt)
DataGrid Objekte gibt es bei mir nicht; in der Hilfe gibt es solche auch nicht.

Haste noch ne andere Idee?
 
Das war ja auch kein fertiger Code und diente nur zur Veranschaulichung.

Im DataGrid (in Delphi / Borland C++, also VCL DBGrid) sollten die Datensätze des Query-Results nur dargestellt werden, damit man visuell was sieht.

TQuery unterstützt ExecSQL (wenn kein DataSet als Result zurückgeliefert wird) und Open (wenn ein DataSet zurückgeliefert wird, wie bei SELECT-Statements).

Statt irgendwas mit der BDE zu machen solltest Du aber mindestens auf ADO aufsetzen, wenn es unbedingt noch Borland C++ / Delphi sein muss. Borland C++ / Delphi halte ich inzwischen nicht mehr als empfehlenswert, da Borland selbst Borland C++ / Delphi eingestampft hat.
 
und Open (wenn ein DataSet zurückgeliefert wird, wie bei SELECT-Statements)

Ja, das würde mir schon reichen. Ich wüsste nur gerne, wie ich dieses DataSet abspeichern und verwenden kann. Könntest du da ein kurzes Beispiel zu liefern? Denn die Hilfe vom Borland C++ Builder ist nicht immer das gelbe vom Ei, wenn man die ganzen Fachbegriffe nicht kennt.

Statt irgendwas mit der BDE zu machen solltest Du aber mindestens auf ADO aufsetzen, wenn es unbedingt noch Borland C++ / Delphi sein muss.

Das spielt in diesem Fall keine Rolle. Es geht um ein Schulprojekt und es muss der C++ Builder von Borland zum Einsatz kommen. Wenn es nach mir ginge, hätte ich es mit PHP gelöst.
 
Was die Hilfe von Borland C++ / Delphi anbetrifft - es gibt nichts Besseres.

Naja, das DataSet abspeichern - Du hast es doch schon im Arbeitsspeicher wenn Du DataSet->Open rufst - wofür dann Abspeichern?

Sonst guck Dir mal die Methoden Next, FieldByName, das Array Fields und die Funktion EoF an...

Grüße
Stage Zero
 
Danke für die Hilfe; ich habe das jetzt soweit hinbekommen aber noch ein paar Fragen, wenn es dich nicht zu sehr nervt...

- die Passwörter in der MySQL-Datenbank würde ich gerne, wie auch bei PHP-Applikationen, mit md5 verschlüsseln. Gibt es eine md5 (PHP) vergleichbare Funktion im C++ Builder, womit er mir den md5-Hash von meinem Klartext-Passwort erstellt?

- Wie kann ich im Passwortfeld (es geht zunächst um einen Loginbereich) mit Sternchen versehen (also das Pendant zu <input type="password"> in HTML)?

- Gibt es eine vordefinierte Komponente, die mir ausgewählte Datensätze in einer Liste anzeigt, so dass ich nicht tausend Labels dort rein klicken und füllen muss?
 
Hallo!

Kein Thema...

Zu 1: Wie MD5 arbeitet ist im Netz recht gut dokumentiert. Du könntest eine entsprechende Funktion mit C++ in eine Deiner Klassen - oder besser noch - eine eigene Klasse implementieren. Vorgefertigt wird es da sicherlich auch was geben, google halt mal und beachte dabei aber die jeweiligen Lizenzbedingungen.

Zu 2: Property PasswordChar vom entsprechendem TEdit-Feld auf * setzen.

Zu 3: Filtern solltest Du eigentlich im SQL-Statement Deiner Query schon... Jedes DataSet (TTable, TQuery) hat das Event OnFilterRecord. Benutze hierzu mal die Hilfe, da sollte es sogar ein Beispiel geben.

PS: Ich empfehle den Umstieg auf C#.net. :-D

Grüße
Stage Zero

ICQ: 349664391
 
1)
Ok, ich schau mir das mal an wenn ich Zeit habe; eventuell auch erst in ein paar Wochen, denn es ist wichtiger, dass ich mich erstmal um andere Bestandteile des Programms kümmere und das kann man später immer noch leicht modifizieren.

2)
Hat funktioniert; danke.

3)
Es geht in dem Fall um eine Liste von Datensätzen, die nicht gefiltert werden soll.

Beispiel: Man wollte 100 Studiengänge verwalten und diese untereinander ausgeben, ohne welche auszulassen; in PHP würde ich nun einfach eine Schleife laufen lassen und das ganze schön in einer Tabelle ausgeben. Aber ich weiß nicht so recht, wie ich das im C++ Builder am besten bewerkstellige. Ich denke, es ist nicht so vorgesehen, dass man 10 Labels definiert (in dem Fall keine TEdit, da die Daten nicht modifiziert werden) und dort dann alle Datensätze ausgibt?
 
Hallo,

wenn Du ICQ hast, wirf es mal an und schreib mich an. Meine ICQ: 349664391

Um die Datensätze darzustellen bindest Du Deine TQuery / TTable an eine TDataSource. Dann bindest Du noch ein TDBGrid an die DataSource und eventuell noch einen TDBNavigator. Und schon hast Du eine relativ komfortable GUI um Datensätze anzeigen zu lassen, durchblättern zu können, hinzufügen zu können und löschen zu können - und das alles ohne eine Zeile Code.

Grüße
Stage Zero
 
Zurück
Oben