Avatar billede mr_green Nybegynder
08. juli 2003 - 13:43 Der er 26 kommentarer og
1 løsning

DBLookupComboBox virker ikke med BDE/ADO?

Jeg har en DBLookupComboBox som kommer med fejl lige meget om jeg bruger ADOQuery eller en normal Query(BDE)

**BDE
Når DBLookupComboBox dropper ned så prøver jeg at vælge en af de records den viser, men den bliver bare ved med at stå til den samme record, hvad skyldes dette jeg har ikke problemet med ADO

**ADO
De første records bliver fyldt fint ind i DBLookupComboBox. men når jeg så brøver at fylde nogle nye i får jeg følgende fejl:
"Insufficient key column information for updating or refreshing"

Jeg skal bare have en af dem til at virke.....
Avatar billede assassin Juniormester
08. juli 2003 - 14:23 #1
**ADO

Kan du forklare nærmere hvordan du 'prøver at fylde nogle nye i'
Avatar billede mr_green Nybegynder
08. juli 2003 - 14:26 #2
procedure FyldInd;
begin
  with BDEQuery1 do
  begin
    close;
    SQL.Clear;
    SQL.Add('select childtypenr, name, quantity');
    SQL.Add('from machsparecomb, sparepart');
    SQL.Add('where machinenr = ' + QuotedStr(EdProject.Text));
    SQL.Add('and childtypenr = typenr');
    open;
  end;

  with BDEQuery do
  begin
    close;
    SQL.Clear;
    SQL.Add('select childtypenr, name, quantity');
    SQL.Add('from machsparecomb, sparepart');
    SQL.Add('where machinenr = ' + QuotedStr(EdProject.Text));
    SQL.Add('and childtypenr = typenr');
    open;
    while not EOF do
    begin
      SelectedFields.CompChild := FieldByname('childtypenr').AsString;
      SelectedFields.CompName := FieldByname('name').AsString;
      CompDBLCB.DataSource := CompDS;
      CompDBLCB.ListSource := CompDS1;
      CompDBLCB.DataField := 'childtypenr';
      CompDBLCB.KeyField := 'childtypenr';
      CompDBLCB.ListField := 'childtypenr;name';
      CompDBLCB.DropDown;
      CompDBLCB.CloseUp(True);
      Next;
    end;
  end;
end;

Gir det nogen mening...?
Avatar billede mr_green Nybegynder
08. juli 2003 - 14:32 #3
BDEQuery står både for ADO og BDE....
Avatar billede assassin Juniormester
08. juli 2003 - 14:55 #4
Prøv at smide et dataset på din form.

sæt lookupcomboboxens Lookuptable til datasetet og skriv din SQL forespørgsel i datasetets commandText, med Edproject.text som parameter.

Vælg derefter lookupcomboboxens lookupfield til det felt, som du ønsker at vise i comboboxen.
Avatar billede assassin Juniormester
08. juli 2003 - 15:06 #5
Hvordan ser dine tabeller ud?
Avatar billede mr_green Nybegynder
09. juli 2003 - 08:15 #6
Jeg har nu prøvet det du skrev, men den reagerer på samme måde...
Avatar billede assassin Juniormester
09. juli 2003 - 09:37 #7
Prøv at slette nedenstående:

SelectedFields.CompChild := FieldByname('childtypenr').AsString;
SelectedFields.CompName := FieldByname('name').AsString;
CompDBLCB.DataField := 'childtypenr';
CompDBLCB.KeyField := 'childtypenr';
CompDBLCB.ListField := 'childtypenr;name';
CompDBLCB.DropDown;
CompDBLCB.CloseUp(True);
Avatar billede mr_green Nybegynder
09. juli 2003 - 09:56 #8
Det virker ikke heller..

Jeg har prøvet at lave en helt ny koden følger:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, DBTables, DBCtrls, StdCtrls, ADODB, ExtCtrls;

type
  TForm1 = class(TForm)
    DBLookupComboBox1: TDBLookupComboBox;
    Query1: TQuery;
    DataSource1: TDataSource;
    DataSource2: TDataSource;
    Query2: TQuery;
    Edit1: TEdit;
    Database1: TDatabase;
    Button2: TButton;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Close;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  with Query1 do
  begin
    close;
    ParamByName('EdProjekt').AsString := edit1.Text;
    open;
  end;

  with Query2 do
  begin
    close;
    ParamByName('EdProjekt').AsString := edit1.Text;
    open;
  end;
end;

end.

**Query.SQL:

select childtypenr, name, quantity
from machsparecomb, sparepart
where machinenr =:EdProjekt
and childtypenr = typenr


**DBLookupComboBox
DataSource = DataSource1
DataField = ChildTypeNr

ListSource = DataSource2
KeyField = ChildTypeNr
ListField = ChildTypeNr;Name

Hvad kan der være galt?
Avatar billede assassin Juniormester
09. juli 2003 - 13:04 #9
Hvordan ser din database ud??
Avatar billede mr_green Nybegynder
09. juli 2003 - 13:09 #10
Hvad mener du med hvordan den ser ud?
Avatar billede assassin Juniormester
09. juli 2003 - 13:27 #11
Hvilke felter er der i tabellerne:
machsparecomb, sparepart
Avatar billede mr_green Nybegynder
09. juli 2003 - 13:43 #12
**machsparecomb:

MaschineNr    <PK, FK1>
ChildTypeNr    <PK, FK2>
Quantity


**Sparepart:

TypeNr        <PK>
Name
EAN
Supplier
Price
Unit
PackSize
PriceUpdate
DrawPath
PicPath
Key
Avatar billede assassin Juniormester
09. juli 2003 - 14:05 #13
Ændre din SQL-forespørgsel til:

SELECT M.childtypenr, M.quantity, S.name
FROM machsparecomb M
INNER JOIN sparepart S ON (M.childTypeNr = S.TypeNr)
WHERE machinenr =:EdProjekt
Avatar billede mr_green Nybegynder
09. juli 2003 - 14:06 #14
Oki jeg prøver lige :-)
Avatar billede mr_green Nybegynder
09. juli 2003 - 14:36 #15
Der er en fejl i SQL strengen som jeg ikke umiddelbart kan finde, har ikke arbejdet særligt meget med INNER Joins..
Avatar billede assassin Juniormester
09. juli 2003 - 14:42 #16
Hvilken fejl får du?
Avatar billede assassin Juniormester
09. juli 2003 - 14:43 #17
du har defineret EdProjekt som parameter?
Avatar billede mr_green Nybegynder
09. juli 2003 - 14:43 #18
ORA-00933 SQL kommando er ikke korrekt afsluttet
Avatar billede mr_green Nybegynder
09. juli 2003 - 14:44 #19
Jeg har defineret den
Avatar billede assassin Juniormester
09. juli 2003 - 14:48 #20
Den sidste linie skal være:

WHERE M.machinenr =:EdProjekt
Avatar billede mr_green Nybegynder
09. juli 2003 - 14:50 #21
Jeg får stadig den samme fejl...
Avatar billede assassin Juniormester
09. juli 2003 - 14:56 #22
får du fejlen design eller runtime?

Prøv at ændre datasource active til true og tilbage igen til false - får du fejlen der?
Avatar billede mr_green Nybegynder
09. juli 2003 - 14:58 #23
Ja både der og når jeg kører programmet...
Avatar billede assassin Juniormester
09. juli 2003 - 15:01 #24
Er det en SQL-database, som du bruger.
Avatar billede mr_green Nybegynder
10. juli 2003 - 07:12 #25
Nej Jeg bruger Oracle
Avatar billede mr_green Nybegynder
10. juli 2003 - 13:19 #26
Har fået løst problemet..

Jeg fylder følgende i ADOQuery:

ADOQuery.SQL =
select childtypenr, name, quantity
from machsparecomb, sparepart
where machinenr = 'xxx'
and childtypenr = typenr

Så finder den ikke noget men følgende kan blive sat på DBLookupComboBox.

**DBLookupComboBox
DataSource = DataSource1
DataField = ChildTypeNr

ListSource = DataSource2
KeyField = ChildTypeNr
ListField = ChildTypeNr;Name

Og så virker det :-) men ellers tak for hjælpen
Avatar billede assassin Juniormester
10. juli 2003 - 13:34 #27
Tak selv.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester