Einzelnen Beitrag anzeigen

gemy

Registriert seit: 17. Feb 2019
34 Beiträge
 
#15

AW: SQLQuery das Feld 'id' wurde nicht gefunden.

  Alt 17. Feb 2019, 21:12
Also ich bin jetzt durchgestiegen !

Schickt man ein
Code:
    SQLQuery1.SQL.Text := 'select last_insert_rowid()';
    SQLQuery1.open;
ab, und schaut sich danach mit
Code:
 SQLQuery1.GetFieldNames(names);
an, so sieht man das der Eintrag 0 "Column0" heisst.

Im regelfall würde man z.B. so schreiben
Code:
SQLQuery1.SQL.Text :='select id,website, mainurl,username from users
. Schaut man sich dann mit
Code:
SQLQuery1.GetFieldNames(names)
die Felder an, so heissen diese auch id, website, mainurl, username.

Man kann also auf select last_insert_rowid() nur zugreifen mit :

a)
Code:
    SQLQuery1.SQL.Text := 'select last_insert_rowid()';
    SQLQuery1.open;
    //SQLQuery1.GetFieldNames(names);  
    id := SQLQuery1.Fields[0].AsString;

oder

b)
Code:
    SQLQuery1.SQL.Text := 'select last_insert_rowid()';
    SQLQuery1.open;  
    id := SQLQuery1.Fieldbyname('Column0').AsString;


Warum ich vorher "select last_insert_rowid()" mit der "id mit dem primärschlüssel" gleichgesetzt habe erschließt sich mir nicht mehr. Select_last_insert_rowid() hat mit keinem Feld irgendwas zu tun.

Woher das Column0 kommt oder wie ich das ändern kann weis ich noch nicht. Jedenfalls funktioniert jetzt alles und ich habe den durchblick. Vielleicht sieht noch jemand einen Verbesserungsvorschlag hier :


Code:
procedure TForm1.Button4Click(Sender: TObject);
var
  itm: Tlistitem;
  id: string;
  names: TStringList;
begin
  names := TStringList.Create;
  if ((Trim(Edit1.Text) <> '') and (Trim(Edit2.Text) <> '') and
    (Trim(Edit5.Text) <> '')) then
  begin
    PrepareParamsUsers;   // ...SQLquery1.Params.CreateParam(ftString, 'website', ptInputOutput); ...
    SQLQuery1.ParamByName('website').Value := Edit1.Text;
    SQLQuery1.ParamByName('mainurl').Value := Edit2.Text;
    SQLQuery1.ParamByName('username').Value := Edit3.Text;
    SQLQuery1.ParamByName('password').Value := Edit4.Text;
    SQLQuery1.ParamByName('dbname').Value := Edit5.Text;
    SQLQuery1.ParamByName('searchsite').Value := CheckBox1.Checked;
    SQLQuery1.ParamByName('listresults').Value := CheckBox2.Checked;
    SQLQuery1.SQL.Text :=
      'insert into users (website,mainurl,username,password,dbname,searchsite,listresults) '
      + 'values(:website,:mainurl,:username,:password,:dbname,:searchsite,:listresults) ';
    SQLQuery1.ExecSQL;
    Showmessage(Edit1.Text + ' added to database');
    ClearAllEditFields;
    SQLQuery1.SQL.Text := 'select last_insert_rowid()';
    SQLQuery1.open;
    //SQLQuery1.GetFieldNames(names);     //--  zum testen wie rowid heist.
    id := SQLQuery1.Fields[0].AsString;
    SQLQuery1.SQL.Text :=
      'select id,website, mainurl,username from users where id =' + id;
    SQLQuery1.open;
    SQLQuery1.First;
    SQLQuery1.GetFieldNames(names);
    //showmessage(sqlquery1.Fields[1].asstring);
    while not SQLQuery1.Eof do
    begin
      itm := ListView1.Items.Add;
      itm.Caption := SQLQuery1.FieldByName('id').AsString;
      itm.SubItems.Add(SQLQuery1.FieldByName('website').AsString);
      itm.SubItems.Add(SQLQuery1.FieldByName('mainurl').AsString);
      itm.SubItems.Add(SQLQuery1.FieldByName('username').AsString);
      SQLQuery1.Next;
    end;
  end;
end;



Danke für die Hilfe. Manchmal müssen sich erst einen ganzen Tag lang die Synapsen im Gehirn neu verknüpfen bevor man es kapiert
  Mit Zitat antworten Zitat