[Delphi] ADOQuery SQL probleem

Pagina: 1
Acties:
  • 330 views sinds 30-01-2008
  • Reageer

  • klaaz
  • Registratie: April 2000
  • Laatst online: 25-08 07:14

klaaz

it's me!

Topicstarter
Ik probeer de volgende SQL op een Access database uit te voeren:
code:
1
2
3
4
5
6
7
8
9
10
With AdoQuery1 do
  Begin
    with SQL do
    begin
    Clear;
    Add('select Sum(PrimaryStorage) from Trajecten into :Totaal');
    Add('Where Status = "Offerte" and Maand = "januari"');
    end;
    Open;
  end;

Dit werkt echter niet. Ik heb 100x over de SQL string heen gekeken en kan geen onvolkomenheden vinden. Het resultaat van de query dient in de variabele totaal opgeslagen te worden.

Ligt het aan Delphi/Access of ligt het aan mij?
(Ik hoop aan mij... ;) )

Btw: de foutmelding luid:
Project programma.exe raised an exception class EOleException with message 'Het parameterobject is niet juist gedefinieerd, De informatie is inconsistent of niet volledig'. Process stopped. Use Step or Run to continue.

Als ik de SQL string wijzig in iets simpels als 'Select * from Trajecten' dan krijg ik de foumelding niet. Kan me niet voorstellen dat het iets met parameters te maken heeft.

Wie o wie helpt me uit de brand?

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:43
Op maandag 06 mei 2002 18:03 schreef Klaaz het volgende:


Btw: de foutmelding luid:
Project programma.exe raised an exception class EOleException with message 'Het parameterobject is niet juist gedefinieerd, De informatie is inconsistent of niet volledig'. Process stopped. Use Step or Run to continue.
Het wordt hier toch al gezegd wat uw fout is en wat je eraan kunt doen? De parameter totaal definieren. Dit kun je doen dmv de Object Inspector bij Parameters definieren welk type parameter totaal is, en welk datatype erin moet komen.

Ik denk ook dat die 'INTO :Totaal' constructie niet ANSI SQL is en waarschijnlijk ook niet zal werken in Access. Maar daar ben ik niet zeker van.

https://fgheysels.github.io/


  • klaaz
  • Registratie: April 2000
  • Laatst online: 25-08 07:14

klaaz

it's me!

Topicstarter
Het is toch zo dat de ADO componenten de Delphi SQL vertalen naar native SQL zodat zij werkt met alle databases?

  • Aetje
  • Registratie: September 2001
  • Laatst online: 18-12-2025

Aetje

Troubleshooting met HAMERRR

Nee. En vooral de Jet/Access vertaling is brak.

Forget your fears...
...and want to know more...


  • klaaz
  • Registratie: April 2000
  • Laatst online: 25-08 07:14

klaaz

it's me!

Topicstarter
Een andere oplossing voor mijn probleem?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 08-09 20:49

Creepy

Tactical Espionage Splatterer

Wat wil je precies doen?? Iets selecteren in een variabele in Delphi? Of met behulp van je select een andere tabel vullen?

Het gebruik van :naampje in een query kan in Delphi ja, je moet echter deze parameters om laten zetten naar hun echte waarde zodat ze in ook echt in de query gebruikt kunnen worden.
code:
1
2
3
4
5
6
7
with query do
begin
   sql.clear
   sql.add('Select * from tabelletje');
   sql.add('where veldje = :waarde');
   parambyname('waarde').asinteger:=16; // Dit statement klopt niet, but you'll get the idea.
end;

In SQL wordt het into statement gebruikt voor een heel ander doel: Namelijk het vullen van een tabel met een selectie uit een andere tabel. Delphi variabelen hiermee vullen kan niet.
Probeer dit eens:
code:
1
2
3
4
5
6
7
8
9
10
11
var blaat: integer;
with query do
begin
   close;
   sql.clear;
   sql.add('select veldje from tabel');
   sql.add('where anderveldje = 346566');
   open;
   first;
   blaat:=fieldbyname('veldje').asinteger;
end;

Zo zal van het eerste record dat uit je query komt, de waarde van veldje in de variable blaat staan.

En met een SUM zal je gebruik moeten maken van AS om m.b.v. fieldbyname de waarde in een variabele te kunnen stoppen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
var totaal: integer;

With AdoQuery1 do
Begin
    with SQL do
    begin
    Clear;
    Add('select Sum(PrimaryStorage) AS Totaal from Trajecten');
    Add('Where Status = "Offerte" and Maand = "januari"');
    end;
    Open;
    totaal:=fieldbyname('Totaal').asinteger
end;

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • klaaz
  • Registratie: April 2000
  • Laatst online: 25-08 07:14

klaaz

it's me!

Topicstarter
Creepy, Allereerst bedankt voor je duidelijke voorbeelden. Deze mis ik in de help van Delphi. Uit de code kan ik ook simpel lezen dat het zou moeten werken. Echter:

Als ik jouw voorbeeld code:
code:
1
2
3
4
5
6
7
8
9
10
11
With AdoQuery1 do
Begin
    with SQL do
    begin
    Clear;
    Add('select Sum(PrimaryStorage) AS Totaal from Trajecten');
    Add('Where Status = "Offerte" and Maand = "januari"');
    end;
    Open;
    totaal:=fieldbyname('Totaal').asinteger
end;

gebruik dan krijg ik een nieuwe foutmelding:

ADOQuery1: Field 'Id' not found etc... (Plus het standaard engels geblaat daaromheen).

Deze foutmelding ben ik tijdens eerdere pogingen om de code voorelkaar te krijgen vaker tegen gekomen.

Veld 'Id' bestaat gewoon in de tabel trajecten, deze wordt standaard door Access toegevoegd. Het is het keyveld welke autonummering is. Vreemd. Suggesties?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 08-09 20:49

Creepy

Tactical Espionage Splatterer

Hmm???? Met mijn voorbeeldcode krijg je een foutmelding dat Id niet bestaat??? Dat is wel heel vaag..

Is de Adoquery1.parameters leeg? Zo nee, dan ff leegmaken (in de object inspector legen of een AdoQuery1.parameters.clear)

Hmm... maakt access die automatisch aan?? Heb ik access bij mij nog nooit zien doen, maar ik maak dan ook nooit gebruik van de wizards die bij Access zitten, jij wel???

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • VisionMaster
  • Registratie: Juni 2001
  • Laatst online: 18-07 20:32

VisionMaster

Security!

Op woensdag 08 mei 2002 00:02 schreef Klaaz het volgende:
Creepy, Allereerst bedankt voor je duidelijke voorbeelden. Deze mis ik in de help van Delphi. Uit de code kan ik ook simpel lezen dat het zou moeten werken. Echter:

Als ik jouw voorbeeld code:
code:
1
2
3
4
5
6
7
8
9
10
11
With AdoQuery1 do
Begin
    with SQL do
    begin
    Clear;
    Add('select Sum(PrimaryStorage) AS Totaal from Trajecten');
    Add('Where Status = "Offerte" and Maand = "januari"');
    end;
    Open;
    totaal:=fieldbyname('Totaal').asinteger
end;

gebruik dan krijg ik een nieuwe foutmelding:

ADOQuery1: Field 'Id' not found etc... (Plus het standaard engels geblaat daaromheen).

Deze foutmelding ben ik tijdens eerdere pogingen om de code voorelkaar te krijgen vaker tegen gekomen.

Veld 'Id' bestaat gewoon in de tabel trajecten, deze wordt standaard door Access toegevoegd. Het is het keyveld welke autonummering is. Vreemd. Suggesties?
Misschien bedoelt de foutmelding niet Field Id, maar 1 van de andere velden/parameters die er zijn.
PS: Delphi zou na executie van SQL + parameters de parameter lijst wissen als de SQL-string wordt aangepast.

I've visited the Mothership @ Cupertino


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:43
Je selecteert nergens Id en toch krijg je die error? zeer vreemd.

Ben je er ook zeker van dat dat veld wel degelijk bestaat, want ik heb dat Access ook nog nooit zelf zien aanmaken.

https://fgheysels.github.io/


  • klaaz
  • Registratie: April 2000
  • Laatst online: 25-08 07:14

klaaz

it's me!

Topicstarter
Id bestaat, wordt niet gebruikt in de SQL string.

Ik maak dit soort zaken wel vaker mij in Delphi. Dan zoek ik maar weer een heel andere methode om het zelfde doel te bereiken, vermoeiend... :(

  • Aetje
  • Registratie: September 2001
  • Laatst online: 18-12-2025

Aetje

Troubleshooting met HAMERRR

Op woensdag 08 mei 2002 08:53 schreef Creepy het volgende:
Hmm... maakt access die automatisch aan?? Heb ik access bij mij nog nooit zien doen, maar ik maak dan ook nooit gebruik van de wizards die bij Access zitten, jij wel???
Als je bij het defineren van een tabel geen PK opgeeft, maakt access een autonummering (integer) PK veldje aan. Dat doettie wel standaard...

Forget your fears...
...and want to know more...


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 08-09 20:49

Creepy

Tactical Espionage Splatterer

Ah... ok.. dat wist ik niet (maak ze ook altijd wel aan he :) ).

Blijft vreemd dat ie blijft zeuren over dat ID terwijl in de query op geheel andere velden wordt geselecteerd.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1