Autor Beitrag
dontello
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 2



BeitragVerfasst: Mi 16.03.11 15:03 
Hallo,

wie kann ich aus einer MSSQL Datenbank Tabelle die Spaltennamen und Datentypen auslesen mit Hilfe der AdoTable Komponmenten?
mikhal
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 109

Windows 10 Professional 64-Bit
VS 215 CE, Delphi 10.1 Berlin Professional
BeitragVerfasst: Mi 16.03.11 15: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

_________________
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
dontello Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 2



BeitragVerfasst: Mi 16.03.11 15:21 
ausblenden 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 user profile iconNarses: Code- durch Delphi-Tags ersetzt
mikhal
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 109

Windows 10 Professional 64-Bit
VS 215 CE, Delphi 10.1 Berlin Professional
BeitragVerfasst: Mi 16.03.11 15: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

_________________
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
dontello Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 2



BeitragVerfasst: Mi 16.03.11 15:39 
ist das so korrekt
ausblenden Delphi-Quelltext
1:
2:
3:
4:
    AdoConn.Create();
    AdoConn.ConnectionString := 'Verbindungsstring';
    AdoConn.Open;
    Adoconn.getfieldnames('dat_bezirke', liste);


Moderiert von user profile iconNarses: Delphi-Tag repariert.
mikhal
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 109

Windows 10 Professional 64-Bit
VS 215 CE, Delphi 10.1 Berlin Professional
BeitragVerfasst: Mi 16.03.11 15: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

_________________
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
guinnes
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 182
Erhaltene Danke: 14



BeitragVerfasst: Mi 16.03.11 16:05 
user profile icondontello hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden 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 :

ausblenden Delphi-Quelltext
1:
Liste := TStringlist.Create					
mikhal
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 109

Windows 10 Professional 64-Bit
VS 215 CE, Delphi 10.1 Berlin Professional
BeitragVerfasst: Mi 16.03.11 16:11 
@Guiness: Habe ich gar nicht zur Kenntnis genommen...
Grüße
Mikhal

_________________
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
guinnes
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 182
Erhaltene Danke: 14



BeitragVerfasst: Mi 16.03.11 16:33 
user profile iconmikhal hat folgendes geschrieben Zum zitierten Posting springen:
@Guiness: Habe ich gar nicht zur Kenntnis genommen...
Das übersieht man auch wirklich leicht, ich habe auch 3 Mal gelesen :wink:
dontello Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 2



BeitragVerfasst: Mi 16.03.11 16:56 
ausblenden 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 user profile iconNarses: Code- durch Delphi-Tags ersetzt
guinnes
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 182
Erhaltene Danke: 14



BeitragVerfasst: Mi 16.03.11 17: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
dontello Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 2



BeitragVerfasst: Mi 16.03.11 17: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) ?
mikhal
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 109

Windows 10 Professional 64-Bit
VS 215 CE, Delphi 10.1 Berlin Professional
BeitragVerfasst: Mi 16.03.11 18:59 
Schau dir mal dieses Tutorial an. Hier geht es zwar um die Anbindung von Access, aber das Prinzip ist bei SQL Server das gleiche.

Grüße
Mikhal

_________________
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
dontello Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 2



BeitragVerfasst: Do 17.03.11 16: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Do 17.03.11 17:50 
ausblenden Delphi-Quelltext
1:
2:
3:
uses Typinfo;

GetEnumName(TypeInfo(TFieldType), Ord(f.DataType))

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
dontello Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 2



BeitragVerfasst: Fr 18.03.11 11:51 
Gibt es dafür ein gutes Beipiel im Netz oder kann hier jemand eins aufführen zum auslesen der Datentypen von Tabellenspalten?
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Fr 18.03.11 12:21 
zum Fertigbasteln...
ausblenden 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;

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
dontello Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 2



BeitragVerfasst: Fr 18.03.11 15:16 
Wie erfolgt dann eine Ausgabe der Daten?

ausblenden delphi
1:
2:
3:
    fieldarray := GetFields(tabelle);

    edit1.Text := fieldarray[1].DataType;


So korrekt ?