Toon posts:

[DELPHI] Probleem met procedure

Pagina: 1
Acties:

Verwijderd

Topicstarter
De onderstaande procedure doet niet wat ie moet doen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TActiveXTreeview.Verwijderen(Delete_id : Integer);
begin
  DragDrop.Sql.Clear;
  DragDrop.Sql.Add('SELECT id, omschrijving FROM cms WHERE parent_id = '''+IntToStr(Delete_id)+'''');
  DragDrop.Active := True;
  while not DragDrop.Eof do
    begin
      ShowMessage(DragDrop.FieldValues['omschrijving']);
      Verwijderen(DragDrop.FieldValues['id']);
      DragDrop.Next;
    end;
  DragDrop.Sql.Clear;
  DragDrop.Sql.Add('SELECT id, omschrijving FROM cms WHERE id = '''+IntToStr(Delete_id)+'''');
  DragDrop.Active := True;
  ShowMessage(DragDrop.FieldValues['omschrijving']);
end;

Wel logisch want hij maakt DragDrop Query weer leeg nadat de procedure opnieuw wordt aangeroepen.

Mischien iemand suggesties om dit op te lossen ?

  • whoami
  • Registratie: December 2000
  • Laatst online: 19:34
Wat moet hij dan wel doen? Wat doet hij, of wat doet hij niet.
Kortom: meer informatie.
Lees voor de fun ook eens de P&W Quickstart.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Wat hij doen moet lijkt mij duidelijk...

dragdrop query uitvoeren
deze herhalen totdat alle items bijlangs zijn geweest (eof)
alleen leeg ik de query aan het begin van de procedure omdat ik hiervoor geen andere mogelijkheid zie...

mischien dat hier mensen zijn die het mij kunnen vertellen
zit er nu onderhand anderhalve dag over te denken maar kom er maar niet op

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Deze twee queries kun je combineren tot een query. En het invullen van de parameter Delete_id kun je vullen door ParamByName te gebruiken.

Never underestimate the power of


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Ok, nu weten wat ie moet doen, maar nogsteeds niet wat die dan nu doet wat jij niet wilt.

We adore chaos because we like to restore order - M.C. Escher


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Delphi:
1
DragDrop.Sql.Text := 'SELECT id, omschrijving FROM cms WHERE id = '''+IntToStr(Delete_id);+'''');


Is dit het antwoord dat je zocht?! Dan moet je voortaan je vraag beter stellen. Daar hadden we nooit op kunnne komen met je eerste post.

En tis niet echt op niveau ook

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
hij haalt nu die query leeg en dat wil ik niet.
ik zal es ff kijken naar de reactie van cameodski

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

cameodski schreef op 29 oktober 2002 @ 13:39:
Deze twee queries kun je combineren tot een query. En het invullen van de parameter Delete_id kun je vullen door ParamByName te gebruiken.
Nee, er zit een subtiel verschil in. parent_id en id

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
nee dat bedoel ik niet...

het gaat mij om die while loop dat ie die goed uitvoert.

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
LordLarry schreef op 29 oktober 2002 @ 13:42:
Nee, er zit een subtiel verschil in. parent_id en id
En dat verschil is op te vangen door gebruik te maken van een OR?

Never underestimate the power of


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Verwijderd schreef op 29 oktober 2002 @ 13:42:
hij haalt nu die query leeg en dat wil ik niet.
ik zal es ff kijken naar de reactie van cameodski
Wat is een query leeghalen?

PS: quote anders ook de vraag waarop je antwoord. Leest zo lastig anders

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
LordLarry schreef op 29 oktober 2002 @ 13:45:
[...]


Wat is een query leeghalen?

PS: quote anders ook de vraag waarop je antwoord. Leest zo lastig anders
Okay...

Aan het begin van de procedure voert ie dragdrop.sql.clear uit.
Dit moet hij eigenlijk 1 keer uitvoeren en daarna niet weer want anders heeft die while loop geen effect meer want de query is onderhand dan al leeg.

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Verwijderd schreef op 29 oktober 2002 @ 13:47:
Okay...

Aan het begin van de procedure voert ie dragdrop.sql.clear uit.
Dit moet hij eigenlijk 1 keer uitvoeren en daarna niet weer want anders heeft die while loop geen effect meer want de query is onderhand dan al leeg.
Ik denk dat je de query beter lokaal kunt declaren. Je zit nu door de recursie steeds dezelfde query te gebruiken/misbruiken.

Never underestimate the power of


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Verwijderd schreef op 29 oktober 2002 @ 13:47:
Aan het begin van de procedure voert ie dragdrop.sql.clear uit.
Dit moet hij eigenlijk 1 keer uitvoeren en daarna niet weer want anders heeft die while loop geen effect meer want de query is onderhand dan al leeg.
Met query bedoel je de SQL property? Dat doet 1x voor de while loop en 1x erna. Maar zo te zien roep je jezelf recursief aan. Helaas maakt ook die recursieve functie gebruik van dezelfde variable en dat gaat natuurlijk niet goed.

Maak je DragDrop query dan ook niet globaal, maar lokaal aan.

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
LordLarry schreef op 29 oktober 2002 @ 13:51:
[...]


Met query bedoel je de SQL property? Dat doet 1x voor de while loop en 1x erna. Maar zo te zien roep je jezelf recursief aan. Helaas maakt ook die recursieve functie gebruik van dezelfde variable en dat gaat natuurlijk niet goed.

Maak je DragDrop query dan ook niet globaal, maar lokaal aan.
kan aan mij liggen hoor, maar hoe maak ik die dan lokaal aan ?

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Verwijderd schreef op 29 oktober 2002 @ 13:55:
kan aan mij liggen hoor, maar hoe maak ik die dan lokaal aan ?
Delphi:
1
2
3
4
procedure TActiveXTreeview.Verwijderen(Delete_id : Integer);
var DragDrop: TQuery;
begin
  // Createn en properties zetten

We adore chaos because we like to restore order - M.C. Escher


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Verwijderd schreef op 29 oktober 2002 @ 13:55:
kan aan mij liggen hoor, maar hoe maak ik die dan lokaal aan ?
Oeps, nu ga je wel hele basis vragen stellen.
Ongeveer zoiets:
code:
1
2
3
4
5
6
7
procedure TActiveXTreeview.Verwijderen(Delete_id : Integer);
var
 DragDrop: TQuery;
begin
 DragDrop := TQuery.Create(Self);
 // enz
end;


[edit]
Beetje teveel haast, geloof ik.

Never underestimate the power of


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

cameodski schreef op 29 oktober 2002 @ 14:00:
Oeps, nu ga je wel hele basis vragen stellen.
Ongeveer zoiets:
code:
1
2
3
4
5
6
procedure TActiveXTreeview.Verwijderen(Delete_id : Integer);
var
 DragDrop: TQuery;
begin
 DragDrop.Create;
end;
Is zeker basic, maar jij doet het toch ook niet niet helemaal goed cameodski :p

[ Voor 0% gewijzigd door LordLarry op 29-10-2002 14:03 . Reden: naam verkeerd gespeld, sorry ]

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
tsjah...lokaal globaal.....

dit weet ik dan nog net wel hoor..

  • whoami
  • Registratie: December 2000
  • Laatst online: 19:34
Gewoon je querystring at design time aan de SQL property van de TQuery hangen.
Zie de Object Inspector als je op uw TQuery component klikt.

Dan geef je zoiets in:
code:
1
2
3
SELECT bla
FROM tabel
WHERE Id = :p_Id

En dan ga je ipv in uw procedure uw Query te gaan specifieren gewoon specifieren wat de waarde van die parameter moet zijn:
code:
1
Query1.ParamByName ('p_Id').AsInteger := Id


Dit moet je natuurlijk wel nog even naar uw situatie omvormen, het ging om het idee

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 29 oktober 2002 @ 14:02:
Gewoon je querystring at design time aan de SQL property van de TQuery hangen.
Zie de Object Inspector als je op uw TQuery component klikt.

Dan geef je zoiets in:
code:
1
2
3
SELECT bla
FROM tabel
WHERE Id = :p_Id

En dan ga je ipv in uw procedure uw Query te gaan specifieren gewoon specifieren wat de waarde van die parameter moet zijn:
code:
1
Query1.ParamByName ('p_Id').AsInteger := Id


Dit moet je natuurlijk wel nog even naar uw situatie omvormen, het ging om het idee
Kijk hier kan ik wat mee !
bedankt !

de rest ook bedankt natuurlijk ;)

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Verwijderd schreef op 29 oktober 2002 @ 14:05:
Kijk hier kan ik wat mee !
bedankt !
Het is wel een goeie tip die whoami geeft (cameodski gaf m al in post 3), maar dit is niet het antwoord op je vraag (die je pas na 4 posts wist duidelijk te maken). Je recursive functie zal nogsteeds niet werken als je alleen dit aanpast.

We adore chaos because we like to restore order - M.C. Escher

Pagina: 1