Autor Beitrag
J.Borchert
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 150

WIN10
XE2 Professional
BeitragVerfasst: Do 28.01.10 18:12 
Hallo liebe Helfer,

ich habe täglich mit einer Oberfläche zu tun, die eine SQL-Datenbank mit Baustellen auf einem Kalender darstellt.
Ich würde gern eine eigene Oberfläche zum Anzeigen der Daten basteln, habe vor das mit ADO zu machen, und habe dazu folgende Fragen:

In der INI-Datei der Anwendung ist (glaube ich) der "Pfad" zur Datenbank hinterlegt:

Database=Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=XXXG;Data Source=Braunschweig06SQL

Wenn ich jetzt also eine ADOConnection verwende, was müßte ich dort in den Eigenschaften einstellen?

Da ich den genauen Aufbau der DB nicht kenne (Namen von Tabellen und Spalten) : Wie kann ich die Daten dennoch auslesen?

Bitte verzeiht mir meine Unwissenheiten, bin ganz neu im Umgang mit Datenbanken...

_________________
Wer immer macht was er schon kann, bleibt immer das, was er schon ist. "H.Ford"
Muck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 98
Erhaltene Danke: 8

Win 8, Win 7, Vista, Win XP
Delphi XE3, Delphi 2009, Delphi 2007, Delphi 5
BeitragVerfasst: Do 28.01.10 20:19 
Hallo,

der angezeigte connection string ist von einem Microsoft SQL Server.

Du kannst den gesamten ConnectionString einfach in Delphi in dein TAdoConnection object nach ADOConnection.ConnectionString kopieren. Stelle ausserdem LoginPrompt auf False.

Danach eine TAdoQuery auf die Form ziehen und mit der ADOConnection verbinden.

Stelle ADOQuery.SQL auf "Select name from sys.databases" um Dir alle Tables anzeigen zu lassen.
Manchmal hilft es nach VIEWS zu suchen.
Stelle in einer Query SQL auf "select * from sys.all_views where is_ms_shipped=0" um Dir die namen aller view anzuzeigen.

Na ja, und damm mit SQL "select * from [Tablename oder ViewName aus der Liste]" einfach mal in den Daten stoebern.

Das war es so in ganz kurz.

cu

Markus
J.Borchert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 150

WIN10
XE2 Professional
BeitragVerfasst: Do 28.01.10 21:13 
Danke Markus!

Ich werde es morgen mal ausprobieren. (auf Arbeit)

Achtung liebe Netzwerkadmins:

Im Connection-String das "Braunschweig" war frei erfunden, und ich besitze Leserechte mit Passwort etc. für die ganze Sache.

Setze jetzt die Frage noch nicht auf erledigt...

Danke nochmals... :wink2:

_________________
Wer immer macht was er schon kann, bleibt immer das, was er schon ist. "H.Ford"
J.Borchert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 150

WIN10
XE2 Professional
BeitragVerfasst: Sa 30.01.10 14:52 
Hallo nochmal,

ich habe also getestet und Folgendes bemerkt:

Zitat:
Stelle ADOQuery.SQL auf "Select name from sys.databases" um Dir alle Tables anzeigen zu lassen.
Manchmal hilft es nach VIEWS zu suchen.
Stelle in einer Query SQL auf "select * from sys.all_views where is_ms_shipped=0" um Dir die namen aller view anzuzeigen.


Die Tabellen bekommt man so nicht, aber man bekommt die Namen der einzelnen Datenbanken. VIEWS sind nach meinen neuen Erkenntnissen Abfragen, die gespeichert werden, also auch keine Tabellen-Namen.
Bei den Schweizern unter www.swissdelphicente...showcode.php?id=1433 bekam ich einen Code-Schnipsel zum Ermitteln der Tabellennamen.

Das klappt alles ganz gut. Was ich aber noch nicht geknackt habe sind die einzelnen Spalten-Namen und ob diese indiziert sind oder welche Größe die Felder der einzelnen Spalten (und Typ) haben.

Also wenn jemand noch einen Tip geben könnte, würde ich mich freuen. (Am besten per ADO)

Dennoch Danke für das "auf den Weg bringen..." sagt Jürgen :think:

_________________
Wer immer macht was er schon kann, bleibt immer das, was er schon ist. "H.Ford"
J.Borchert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 150

WIN10
XE2 Professional
BeitragVerfasst: So 07.02.10 19:23 
Der Vollständigkeit halber hier mein Ergebnis:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
procedure QueryToSg(const sg:TStringGrid);
var x,y,maxbreite:integer; s:string;
begin
 with Form1 do // nicht dauernd Form1. schreiben
  begin for x:=0 to sg.RowCount-1 do sg.Rows[x].Clear; // Grid Leer
   with ADOQuery1 do // nicht dauernd ADOQuery. schreiben
    with sg do // nicht dauernd sg. schreiben
     begin ColCount := FieldCount; // Grid-Spalten wie Query-Spalten
           RowCount := RecordCount+1// Grid-Zeilen wie Query-Zeilen
           y:=0// Grid-aktuelle Zeile
           First; // Query (RecordSet) auf erstes Element
           while not Eof do // solange das Ende des Query nicht erreicht ist
            begin for x := 0 to FieldCount-1 do // von 0 bis Spaltenzahl-Query
                   begin Cells[x, y+1] := Fields[x].AsString; // Inhalt kopieren
                         Cells[x, 0] := Fields[x].DisplayLabel; // Header kopieren
                   end;
                  Next; Inc(y); // Query-Zeiger und Grid.Row (y) aufs nächste E.
            end;  // Datenimport ist fertig, jetzt noch ein bisschen formaten:
       // wie bei Excel > Alles markieren > Format > Spalte > optimale Breite
           for x := 0 to ColCount-1 do // alle Spalten des Grids
             begin maxbreite := 0// Start-Annahme
              for y := 0 to RowCount-1 do // laufe durch alle Zeilen
               maxbreite := max(maxbreite, canvas.textwidth(cells[x, y]));
                // wenn breiter als maxbreite, dann maxbreite neu setzen
              ColWidths[x] := maxbreite + 15// etwas mehr sieht besser aus
             end// Grid-Spalten sind nun auf optimaler Breite
     end// with sg
  end// with Form1
end// with procedure


Fields[x].DisplayLabel sind die Überschriften der Tabellenspalten des DBGrids bzw. des Records bzw. von ADOQuery1
Ich stelle mir einfach das Abfrageergebniss (Query) als Tabelle vor.

Danke und Tschüß

_________________
Wer immer macht was er schon kann, bleibt immer das, was er schon ist. "H.Ford"