Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   in Comboboxen datensätze einfügen (https://www.delphipraxis.net/152396-comboboxen-datensaetze-einfuegen.html)

arcon 21. Jun 2010 12:58

Datenbank: ms sql • Version: 2003 • Zugriff über: Inat OPC , Ethernet

in Comboboxen datensätze einfügen
 
hallo miteinander ..

und zwar möchte ich gerne die werte einer bestimmten spalte aus einer tabelle in eine combobox übertragen. dazu habe ich auch schon gegoogelt .. und den folgenden quellcode gefunden gehabt ..

Delphi-Quellcode:
procedure TForm1.ComboBox1onclick(Sender: TObject);
var

adoConn         : TAdoConnection;
SQL             : String;

  begin

  adoConn := TADOConnection.Create(Self);
  adoConn.ConnectionString := 'Provider=SQLOLEDB.1;Integrated ........;
  try
    if (not adoConn.Connected) then
    adoConn.Open;

 SQL := 'Select Description From Watch_Settings';
        while not eof do
  begin
    Combobox1.Items.Add(FieldByName('Feld2').AsString);
  end;

    adoConn.Execute(SQL);

    if (adoConn.Connected) then
    adoConn.Close;
  finally
    if Assigned(adoConn) then
      FreeAndNil(adoConn);

  end;
end;
Meine Frage latet nun, was ich bei FieldByName und bei Feld2 eintragen muss, so dass ich das oben beschriebene problem lösen kann !?!

danke für eure mithilfe !

DeddyH 21. Jun 2010 13:03

AW: in Comboboxen datensätze einfügen
 
Merkwürdiger Code. Du durchläufst eine Ergebnismenge, die Du im Anschluss erst öffnen willst :gruebel:. Es müsste dann aber (bei korrigierter Reihenfolge) FieldByName('Description').AsString heißen.

mkinzler 21. Jun 2010 13:05

AW: in Comboboxen datensätze einfügen
 
Es fehlt irgendwie eien Query/DataSet-Kompo. Zudem fehlt ein .Next in der Schleife

arcon 21. Jun 2010 13:09

AW: in Comboboxen datensätze einfügen
 
hallo,

laut quelltext wird sich erst zum server verbunden ..
anschließend übergebe ich dem SQL-String die select anweisung ... in der ich die spalte Description aus der tabelle watch settings auswähle
und möchte anschließend die gefundenen strings in die combobox einfügen.
aber leider meckert er mir " fieldbyname " und "asstring " an ..

undeklarierte bezeichner ..

ich würde sie ja gerne deklarieren, wenn man nur wüsste, wofür man sie benötigt .. damit ich weiß, welchen wert ich diesen variablen zuweisen muss .. (laut quellcode würde ich sie als string definieren )

arcon 21. Jun 2010 13:11

AW: in Comboboxen datensätze einfügen
 
ich möchte es ohne diverse dateset oder datasource oder list-komponenten durchführen ..
einfach nur durch den quellcode .. aber das stellt sich schwieriger raus, als gedacht ...

mkinzler 21. Jun 2010 13:12

AW: in Comboboxen datensätze einfügen
 
Delphi-Quellcode:
SQL := 'Select Description From Watch_Settings';

AdoQuery.SQL.Text := SQL;
AdoQuery.Open;
while not AdoQuery.eof do
begin
    Combobox1.Items.Add(AdoQuery.FieldByName('Feld2').AsString);
    AdoQuery.Next;
end;

DeddyH 21. Jun 2010 13:14

AW: in Comboboxen datensätze einfügen
 
Da fehlt aber noch ein Open ;)

arcon 21. Jun 2010 13:17

AW: in Comboboxen datensätze einfügen
 
meine ursprüngliche frage wurde aber noch nicht beantwortet ..

für was das "fieldbyname" steht ?

da fehlt ein Open ->
Code:
adoConn.Open;

DeddyH 21. Jun 2010 13:18

AW: in Comboboxen datensätze einfügen
 
FieldByName -> Feld nach Namen (anstatt Index im Fields-Array)

mkinzler 21. Jun 2010 13:23

AW: in Comboboxen datensätze einfügen
 
Das .Open fehlt beim Query

arcon 21. Jun 2010 13:35

AW: in Comboboxen datensätze einfügen
 
ich habe jetzt folgenden kompletten code ...

Delphi-Quellcode:
procedure TForm1.ComboBox1onclick(Sender: TObject);
var

adoConn         : TAdoConnection;
SQL             : String;
ADOQuery        : TADOQuery;
  begin

  adoConn := TADOConnection.Create(Self);
  adoConn.ConnectionString := 'Provider=SQLOLEDB.1;Integrated .....';
  try
    if (not adoConn.Connected) then
    adoConn.Open;

 SQL := 'Select Description From Watch_Settings';
    ADOQuery.SQL.Text := SQL;
    ADOQuery.Open;
    while not AdoQuery.eof do
begin
    Combobox1.Items.Add(AdoQuery.FieldByName('Description').AsString);
    AdoQuery.Next;
end;

    adoConn.Execute(SQL);

    if (adoConn.Connected) then
    adoConn.Close;
  finally
    if Assigned(adoConn) then
      FreeAndNil(adoConn);

  end;
end;
aber nun bringt er mir eine zugriffsverletzung .. weiß jemand rein zufällig, woran es liegen könnte ?

DeddyH 21. Jun 2010 13:38

AW: in Comboboxen datensätze einfügen
 
Was soll den das Execute bewirken? Ist das wieder so eine ADO-Spezialität?

mkinzler 21. Jun 2010 13:41

AW: in Comboboxen datensätze einfügen
 
Du musst den Query noch instantiieren und die Connection zuweisen

Delphi-Quellcode:
adoQuery := TadoQuery.Create(Self);
AdoQuery.Connection := AdoConn;

DeddyH 21. Jun 2010 13:46

AW: in Comboboxen datensätze einfügen
 
Und jetzt im Ganzen (ich hoffe, ich habe nichts vergessen):
Delphi-Quellcode:
procedure TForm1.ComboBox1onclick(Sender: TObject);
var

adoConn : TAdoConnection;
SQL : String;
ADOQuery : TADOQuery;
begin

  adoConn := TADOConnection.Create(nil);
  try
    adoConn.ConnectionString := 'Provider=SQLOLEDB.1;Integrated .....';
    if (not adoConn.Connected) then
      adoConn.Open;

    SQL := 'Select Description From Watch_Settings';
    ADOQuery := TADOQuery.Create(nil);
    try
      ADOQuery.Connection := adoConn;
      ADOQuery.SQL.Text := SQL;
      ADOQuery.Open;
      while not AdoQuery.eof do
        begin
          Combobox1.Items.Add(AdoQuery.FieldByName('Description').AsString);
          AdoQuery.Next;
        end;
    finally
      ADOQuery.Free;
    end;

    //adoConn.Execute(SQL);

    if (adoConn.Connected) then
      adoConn.Close;
  finally
//    if Assigned(adoConn) then
    FreeAndNil(adoConn);
  end;
end;

arcon 21. Jun 2010 13:48

AW: in Comboboxen datensätze einfügen
 
Delphi-Quellcode:
procedure TForm1.ComboBox1onclick(Sender: TObject);
var

adoConn         : TAdoConnection;
SQL             : String;
ADOQuery        : TADOQuery;
  begin

  adoConn := TADOConnection.Create(Self);
  adoConn.ConnectionString := 'Provider=SQLOLEDB.1;Integrated ......';
  adoQuery := TadoQuery.Create(Self);
  AdoQuery.Connection := AdoConn;
  try
    if (not adoConn.Connected) then
    adoConn.Open;

 SQL := 'Select Description From Watch_Settings';

    adoConn.Execute(SQL);
    ADOQuery.SQL.Text := SQL;
    ADOQuery.Open;
    while not AdoQuery.eof do
begin
    Combobox1.Items.Add(AdoQuery.FieldByName('Description').AsString);
    AdoQuery.Next;
    if (adoConn.Connected) then
    adoConn.Close;
end;
  finally
    if Assigned(adoConn) then
      FreeAndNil(adoConn);

  end;
end;
ich habs jetzt so hinbekommen .. aber das problem ist, dass er mir nur den ersten datensatz anzeigt .. und nicht alle datensätze .. das hängt denke ich mal noch mit der next.schleife zusammen ..

und das sql(execute) hängt damit zusammen dass er mir den befehl der in SQL steht auch ausführt.

mkinzler 21. Jun 2010 13:49

AW: in Comboboxen datensätze einfügen
 
Delphi-Quellcode:
    if (adoConn.Connected) then
    adoConn.Close;
muss natürlich aus der Schleife raus

DeddyH 21. Jun 2010 13:52

AW: in Comboboxen datensätze einfügen
 
Dafür ist das ADOQuery.Open da. Aber wenn Du nach dem ersten Datensatz die Verbindung schließt, kann ja auch nur ein Datensatz zurückkommen.
Zitat:

Delphi-Quellcode:
while not AdoQuery.eof do
begin
    Combobox1.Items.Add(AdoQuery.FieldByName('Description').AsString);
    AdoQuery.Next;
    if (adoConn.Connected) then
    adoConn.Close; //hier
end;

Außerdem gibst Du die Query nicht wieder frei. Hast Du meinen Code einmal versucht?

arcon 21. Jun 2010 13:54

AW: in Comboboxen datensätze einfügen
 
danke deddyH .. für den quelltext .. funktioniert wunderbar
und danke an mkinzler :)

problem behoben ..

hier die finalle ausgabe des quellcodes für leute, die auch das selbe problem haben, wie ich ..


Delphi-Quellcode:
procedure TForm1.ComboBox1onclick(Sender: TObject);
var

adoConn : TAdoConnection;
SQL : String;
ADOQuery : TADOQuery;
begin
  combobox1.Clear;
  adoConn := TADOConnection.Create(nil);
  try
    adoConn.ConnectionString := 'Provider=SQLOLEDB.1;Integrated .......';
    if (not adoConn.Connected) then
      adoConn.Open;

    SQL := 'Select Description From Watch_Settings';
    ADOQuery := TADOQuery.Create(nil);
    try
      ADOQuery.Connection := adoConn;
      ADOQuery.SQL.Text := SQL;
      ADOQuery.Open;
      while not AdoQuery.eof do
        begin
          Combobox1.Items.Add(AdoQuery.FieldByName('Description').AsString);
          AdoQuery.Next;
        end;
    finally
      ADOQuery.Free;
    end;

    if (adoConn.Connected) then
      adoConn.Close;
  finally
// if Assigned(adoConn) then
    FreeAndNil(adoConn);
  end;
end;

DeddyH 21. Jun 2010 13:56

AW: in Comboboxen datensätze einfügen
 
Zitat:

Zitat von arcon (Beitrag 1030649)
und danke an m.kanzler :)

Markus Merkel? :mrgreen: :duck:

mkinzler 21. Jun 2010 13:58

AW: in Comboboxen datensätze einfügen
 
Und Datlef H ;)

DeddyH 21. Jun 2010 13:59

AW: in Comboboxen datensätze einfügen
 
:lol:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz