Entwickler-Ecke

Datenbanken - DBGrid einzelne felder...


Luncustaf - So 19.01.03 03:24
Titel: DBGrid einzelne felder...
...in verschiedenen spalten füllen.

hi ich bin irgendwie zu doof dazu hab nu alles ausprobiert und nichts geht :(

wie bekomm ich die datenaus ner datenbank in nen dbgrid? :(

hoffe auf hilfe.

thx.


gr€€tz


grayfox - So 19.01.03 10:05

hallo luncustaf!

hast du auch alle benötigten komponenten auf dein form gezogen und sie miteinander verknüpft?
du brauchst einen TTable, oder ein TQuery, eine TDataSource. einen TDBNavigator und ein TDBGrid.

in TTable trägst du in der Eigenschafte 'Databasename' das verzeichnis ein, in dem sich deine daten befinden, bzw deinen aliasnamen für das datenverzeichnis, in 'Tablename' kannst dann die tabelle auswählen, die du anzeigen willst.

in der TDataSource wählst in 'Dataset' auf deinen table
im TDBGrid und im TDBNavigator stellst als 'Datasource' den namen deiner datasource ein.

sobald du nun im TTable das property 'active' auf true stellst, zeigt das DBGrid bereits den inhalt deiner tabelle an...

schau mal in die tutorials:
einstieg [http://www.delphi-source.de/downloads/dcount.php3?url=http://www.tutorials.delphi-source.de/dbeinstieg/dbeinstieg.zip]
und
fortgeschrittene [http://www.delphi-source.de/downloads/dcount.php3?url=http://www.tutorials.delphi-source.de/dbteil2/dbteil2.zip]
dort findest dazu genaue anleitungen

viel spass!
mfg, stefan


Luncustaf - So 19.01.03 10:41

hi grayfox,


vielen dank für die tuts haben mir sehr geholfen :) nur hab ich noch das problem das es bei den TColumns keine eigenschaft datafield gibt.

wo ich angeben kann welches feld angezeigt werden soll :( kannst du mir da vllt auch nochmal helfen :(

thx

gr€€tz


bis11 - So 19.01.03 10:45

Hi,

wenn Du die Komponente TQuery benutzt, kannst Du durch den SQL-Befehl


Quelltext
1:
SELECT feld1,feld2,feld3 FROM Tabelle                    


benutzen und so dir nur bestimmte Felder aus der Datenbank anzeigen lassen. Bei der Komponente TTable weiß ich das garnicht mehr, da ich die überhaupt nichtmehr benutze. 8)


Luncustaf - So 19.01.03 10:50

jo das mit dem sql weis ich mein code sieht so aus



Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
   sqlq.Sql.Clear;
   sqlq.Sql.Add('SELECT Name FROM user');
   sqlq.Open;
   while not sqlq.Eof do
   begin
      [color=red]frmh_gridf.Columns[0].FieldName := sqlq.FieldByName('Name').AsVariant;[/color]
      sqlq.Next;
   end;
   sqlq.Close;


die rote zeile ist mein problem - ich weis net wie ich die einzelnen der felder der columns füllen kann :(


gr€€tz


grayfox - So 19.01.03 10:53

bitte, bitte. gern geschehen! :)

aus der OH von Delphi:
Zitat:

Jede TDBGridColumns-Komponente enthält eine Kollektion von TColumn-Objekten in einem Datengitter (TDBGrid). TDBGridColumns verwaltet einen Index der Spalten im Array Items. Die Eigenschaft Count enthält die Anzahl der Spalten in der Kollektion. Während des Entwurfs können im Spalteneditor des Datengitters Spalten hinzugefügt, entfernt oder geändert werden.


einfach das TDBGrid doppelklicken, doppelklick auf Columns und du kannst schon die spalten anlegen und bearbeiten, die du im grid anzeigen willst

mfg, stefan


bis11 - So 19.01.03 10:56

Hi,

und wenn Du mal die while-Schleife ganz wegläßt ? Du mußt aber dazu das DBGrid mit der Datasource verbunden haben und die Datasource mit der TQuery, so wie es grayfox beschrieben hat.


grayfox - So 19.01.03 11:20

luncustaf, das grid übernimmt die namen aus der tabelle automatisch, dazu brauchst das

Quelltext
1:
frmh_gridf.Columns[0].FieldName := sqlq.FieldByName('Name').AsVariant;                    

nicht. ein
SELECT * from 'tabellenname' reicht vollkommen aus, um die tabelle anzuzeigen...

warum verwendest überhaupt 'variant'? ist dir der feldtyp nicht bekannt?
es geht doch schneller, wenn du gleich den richtigen typen angibst, als wenn delphi die typen erst umwandeln muss :wink:

mfg, stefan


Luncustaf - So 19.01.03 13:55

hi,

thx für eure antworten.

ich hab das variant genommen weil ich nen bissrl rumprobiert habe das hat aber net gefunkt stand halt gerade so da wo ich den post gemacht habe - wenn ich das mit dem stern mache funktioniert das auch net :(

ich weis auch net


Quelltext
1:
2:
3:
4:
   sqlq.Sql.Clear;
   sqlq.Sql.Add('SELECT * FROM user');
   sqlq.Open;
   sqlq.Close;



ich hab das nun so dastehen aber da regt sich nix - woher weis das grid in welche spalte es welche datensätze schreiben muss? :(

ich blick diese komponente net :(

gr€€tz


grayfox - So 19.01.03 14:15

hast in der TQuery den 'Databasename' ausgefüllt?
entweder einen alias oder den verzeichnisnamen?
dann deaktivier deinen code mal
und trag in der TQuery bei der eigenschaft 'SQL'
Zitat:
SELECT * from den_namen_deiner_tabelle_ohne_punkt_endung

wenn du nun das property active auf true stellst, dann sollte dein grid bereits im entwurfsmodus gefüllt werden.

hast du ganz sicher bei der TDataSource als 'dataset' den namen deiner query eingetragen? und beim grid steht auch als datasource der name deiner datasource?

das grid weiss deshalb welche felder es anzeigen soll, weil du es ihm sagst. '*' heisst 'alle felder'...

du kannst ja auch sagen 'SELECT zuname, vorname FROM adressen' zb...

mfg, stefan
ps: hast dir schon einige beiträge im forum über queries durchgelesen? vielleicht kommst so auf die lösung?


grayfox - So 19.01.03 14:35

komisch, bei mir tut sich was :)

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.AnzeigeBtnClick(Sender: TObject);
begin
  Query1.Close;
  Query1.Sql.Clear;
  Query1.Sql.Add('SELECT * FROM tblKontakt');
  Query1.Open;
end;

procedure TForm1.EndeBtnClick(Sender: TObject);
begin
  Query1.Close;
  close;
end;


ich befasse mich zwar erst seit heute 10 uhr vormittags mit SQL, vermute aber stark, dass dein sqlq.Close die query schon wieder schliesst, bevor du sie noch sehen kannst ;) was meinst du?

mfg, stefan


Luncustaf - So 19.01.03 14:35

hmm jetzt gehts auf einmal


*komisch :()*


naja egal trotzdem nen dickes thx :) @ query's damit weis ich schon umzugehen hab schonmal ne db anwendung geschrieben nur das grid noch nie verwendet - trotzdem nen dickes thx an dich und bis11 :)


gr€€tz


grayfox - So 19.01.03 14:51

na gott sei dank, dass es endlich klappt :wink:
und wo lag jetzt der fehler? hattest nicht alle sources, pfade, etc eingetragen?
ich bin bis heute immer mit tables ausgekommen, aber jetzt weiss ich auch, wie man mit queries hantiert *gg*

mfg, stefan


Luncustaf - So 19.01.03 15:17

der fehler lag da das man das query bei active auf true machen muss - da reicht nen open close net aus :(


gr€€tz