Entwickler-Ecke
Datenbanken - Spaltennamen und Datentypen auslesen
dontello - Mi 16.03.11 14:03
Titel: Spaltennamen und Datentypen auslesen
Hallo,
wie kann ich aus einer MSSQL Datenbank Tabelle die Spaltennamen und Datentypen auslesen mit Hilfe der AdoTable Komponmenten?
mikhal - Mi 16.03.11 14:11
TAdoConnection.GetTabelNames um Tabellennamen einer Datenbank zu ermitteln
TAdoConnection.GetFieldNames um Feldnamen einer Tabelle zu ermitteln
TField.DataType um den Feldtyp zu ermitteln.
Grüße
Mikhal
dontello - Mi 16.03.11 14:21
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm4.Button2Click(Sender: TObject); var Adoconn: TAdoConnection; liste: TStrings; begin liste.Create; AdoConn.Create(nil); Adoconn.getfieldnames('tabellenname', liste);
end; |
Bei dem Code bekomme ich einen Fehler. (Zugriffsverletzung)
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt
mikhal - Mi 16.03.11 14:29
Wo ist der ConnectionString, mit dem du die TAdoConnection mit deinem SQl Server verbindest? Ich würde ausserdem nicht TStrings sondern TStringList verwenden.
Grüße
Mikhal
dontello - Mi 16.03.11 14:39
ist das so korrekt
Delphi-Quelltext
1: 2: 3: 4:
| AdoConn.Create(); AdoConn.ConnectionString := 'Verbindungsstring'; AdoConn.Open; Adoconn.getfieldnames('dat_bezirke', liste); |
Moderiert von
Narses: Delphi-Tag repariert.
mikhal - Mi 16.03.11 14:43
leg dir mal ein Formular an, packe da eine TAdoConnection aus der Komponentenliste drauf, klicke doppelt auf das Komponentensymbol und stelle den ConnectionString zusammen (Provider auswählen, Datenbankauswählen, Benutzer eintragen, Passwort eintragen). Nach dem Bestätigen deiner Eingaben, solltest du im Dialog den fertigen ConnectionString vorfinden. Bevor du den aber einfach kopierst, teste erst mal, ob er korrekt ist, indem du die Property Connected der TAdoConnection im ObjectInspector auf True setzt.
Grüße
Mikhal
guinnes - Mi 16.03.11 15:05
dontello hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm4.Button2Click(Sender: TObject); var Adoconn: TAdoConnection; liste: TStrings; begin liste.Create; AdoConn.Create(nil); Adoconn.getfieldnames('tabellenname', liste);
end; |
Bei dem Code bekomme ich einen Fehler. (Zugriffsverletzung) |
Hast du schon mal gehört, daß man Objekte so erzeugt :
Delphi-Quelltext
1:
| Liste := TStringlist.Create |
mikhal - Mi 16.03.11 15:11
@Guiness: Habe ich gar nicht zur Kenntnis genommen...
Grüße
Mikhal
guinnes - Mi 16.03.11 15:33
mikhal hat folgendes geschrieben : |
| @Guiness: Habe ich gar nicht zur Kenntnis genommen... |
Das übersieht man auch wirklich leicht, ich habe auch 3 Mal gelesen :wink:
dontello - Mi 16.03.11 15:56
delphi
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm4.Button2Click(Sender: TObject); var
Adoconn: TAdoConnection; liste: TStringlist; begin liste := TsTringlist.Create;
liste.Create; AdoConn.Create(nil); AdoConn.ConnectionString := 'Verbindungsstring ist getestet';
AdoConn.Open; Adoconn.getfieldnames('dat_bezirke', liste); |
Irgendwie will es einfach nicht klappen.
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt
guinnes - Mi 16.03.11 16:03
Kannst du uns erklären was der Schei... soll ?
Warum steht da immer noch das liste.Create; ?
Warum glaubst du, die AdoConnection wird grundsätzlich anders erzeugt als eine Stringliste ?
Ich rate dir dringend zu einem
Grundlagenkurs [
http://www.delphi-treff.de/tutorials/grundlagen/]
dontello - Mi 16.03.11 16:10
Sorry. Habs einfach überlesen hier die ganze Zeit.
Beim Debuggen bekomm ich beim ConnectionString noch ein Fehler. Über die Ado Komponente Verbindungstest funktioniert der Verbindungstest. Wenn ich auf Verbindung true gehe, gebe ich Paswort und User ein und kriege die Verbindung. Muss ich dem connection String den User + Benutzername noch irgendwie mitgeben?
Was muss ich bei AdoConn.Create(hier eintragen) ?
dontello - Do 17.03.11 15:37
Danke es klappt jetzt soweit.
Habe noch eine andere Frage bezüglich des Datentypes.
Ich habe den Datentyp jetzt als TFieldType vorliegen. Gibt es eine Möglichkeit mir den als String ausgeben zu lassen?
bummi - Do 17.03.11 16:50
Delphi-Quelltext
1: 2: 3:
| uses Typinfo;
GetEnumName(TypeInfo(TFieldType), Ord(f.DataType)) |
dontello - Fr 18.03.11 10:51
Gibt es dafür ein gutes Beipiel im Netz oder kann hier jemand eins aufführen zum auslesen der Datentypen von Tabellenspalten?
bummi - Fr 18.03.11 11:21
zum Fertigbasteln...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| type TFieldInfoRec=Record Name:String; Size:Integer; DataType:String; End; TFieldinfoArray=Array of TFieldInfoRec;
Function PGetFields(ds:Tdataset):TFieldinfoArray; var i:Integer; begin SetLength(Result,ds.FieldCount); for i := 0 to ds.FieldCount - 1 do begin Result[i].Name := ds.Fields[i].FieldName; Result[i].Size := ds.Fields[i].Size; Result[i].DataType := GetEnumName(TypeInfo(TFieldType), Ord(ds.Fields[i].DataType)) end; end; |
dontello - Fr 18.03.11 14:16
Wie erfolgt dann eine Ausgabe der Daten?
delphi
1: 2: 3:
| fieldarray := GetFields(tabelle);
edit1.Text := fieldarray[1].DataType; |
So korrekt ?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!