webForumDet fria alternativet

Jag har problem med SQL i Delphi!

15 svar · 502 visningar · startad av Dr-man

Dr-manMedlem sedan juli 2002732 inlägg
#1

Jag har följande problem med SQL i Delphi!

När försöker köra följande kod i Delphi version 5.

 
with Query1 do 
  begin 
    SQL.Clear; 
    Close; 
    SQL.Add('insert into address2(Name,Telefon) values(:'+Edit1.Text+',:'+Edit2.Text+')'); 
    ExecSQL; 
  end;

får jag detta felmeddelande

Query1 Field is of an unknown type
TigermannenMedlem sedan juli 200124 inlägg
#2

fnuttar

jag antar att Name och Telefon är av typen sträng. Isf ska du ha fnuttar runt datan du skickar in i SQL-satsen, enklast fixar du detta med funktionen QuotedStr som finns i sysutils:

with Query1 do
begin
SQL.Clear;
Close;
SQL.Add('insert into address2(Name,Telefon) values('+quotedstr(Edit1.Text)+','+quotedstr(Edit2.Text)+') ');
ExecSQL;
end;

mvh Tony

Dr-manMedlem sedan juli 2002732 inlägg
#3

Tack nu fungerar det!

Hur löser jag följande?
Koden:

SQL.Add('delete from address where Namn='+DBGrid1.SelectedField);
Får felmeddelandet:
Incompatible types: 'String' and 'TField'
TigermannenMedlem sedan juli 200124 inlägg
#4

SQL.Add('delete from address where Namn='+qutoedstr(DBGrid1.SelectedField.asstring));

mvh Tony

Dr-manMedlem sedan juli 2002732 inlägg
#5

Annars vet du nån bra manual som tar upp sql i Delphi?

TigermannenMedlem sedan juli 200124 inlägg
#6

Här finns en ganska bra nybörjarguide till delphi, samt en artikel om delphi och ADO:

http://www.fuzzydizzie.com/d_index.htm

/Tony

Dr-manMedlem sedan juli 2002732 inlägg
#7

Vad är det för fel när det inte vill fungera fast jag trycker på knapp
som skall radera det markerade fältet?

Kod:

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
  Check:=True;
  Button1.Enabled:=True;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if DBGrid1.SelectedRows.Count<0 then
  begin
    with Query1 do
    begin
      SQL.Clear;
      SQL.Add('delete from address2 where Namn='+quotedstr(DBGrid1.SelectedField.asstring));
      ExecSQL;
    end;
    Button1.Enabled:=False;
  end;
end;
akkeakkerMedlem sedan jan. 200327 inlägg
#8

Uppfylls verkligen villkoret i if-satsen?

Dr-manMedlem sedan juli 2002732 inlägg
#9

Har ingen aning!

Men hur skall man korrigera detta för att få det att fungera?

TigermannenMedlem sedan juli 200124 inlägg
#10

så här kan du göra:

if DBGrid1.SelectedField.asstring<>'' then
begin
with Query1 do
begin
SQL.Clear;
SQL.Add('delete from address2 where Namn='+quotedstr(DBGrid1.SelectedField.asstring));
ExecSQL;
..

mvh Tony

Dr-manMedlem sedan juli 2002732 inlägg
#11

När jag använder koden i det föregående inlägget, får jag
följande felmeddelande:
Access violation at adress 0048D797 in module 'sqlprog.exe'
Read of adress 00000000

Kan nån hjälpa mig?

HardrockerMedlem sedan nov. 2003310 inlägg
#12

En liten observation.

Borde du inte kolla om SelectedRows.Count är större än noll istället för mindre än noll?

/Ante

Dr-manMedlem sedan juli 2002732 inlägg
#13

Kan ingen hjälpa med problemet?!

Eller finns det nån annan lösning?

@ndersMedlem sedan juni 200032 969 inlägg
#14

Dr-man skrev:

Kan ingen hjälpa med problemet?!

Var det inte det Hardrocker försökte göra?

Läs hans inlägg igen. Utan att kunna Delphi tycker jag att just det ser konstigt ut.

Dr-manMedlem sedan juli 2002732 inlägg
#15

Problemet har inget med if-satsen att göra utan närmare bestämt med denna rad
SQL.Add('delete from address2 where Namn='+quotedstr(DBGrid1.SelectedField.asstring));

Efter jag satt till denna rad, så började problemet

Access violation at adress 0048D797 in module 'sqlprog.exe'
Read of adress 00000000

Ingen som har någon aning?

HardrockerMedlem sedan nov. 2003310 inlägg
#16

Kontrollera selectedfield verklig är assignad.

Testa följande:

if assigned(DBGrid1.SelectedField) then
SQL.Add('delete from address2 where Namn='+quotedstr(DBGrid1.SelectedField.asstring))
else
showmessage('hej hopp');

/Ante

130 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)