[delphi/sql] Like mag geen % hebben :?

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

  • heuveltje
  • Registratie: Februari 2000
  • Laatst online: 21-08 22:37

heuveltje

KoelkastFilosoof

Topicstarter
Hoi

dit is geheid iets simpels maar ik sta al een uur er na te zoeken |:(

Ik probeer in delphi de volgende sql statement uit te voegen
code:
1
  sqlquery1.sql.add ('SELECT * FROM song where artist = ' + inttostr(aid) + ''' and Title like '''%' + E2title.Text + '%''');


alleen slaat de compiler nu vast op
[Error] Main.pas(539): Illegal character in input file: '%' ($25)

like um ..........
Hoe kan ik nu een like doen als ik % niet mag gebruiken ?
is die in delphi vervangen door een ander commando ofzo, of moet ik die escapen :?
kan er in de delphi helpfiles niks over vinden.........

wie weet raad

Heuveltjes CPU geschiedenis door de jaren heen : AMD 486dx4 100, Cyrix PR166+, Intel P233MMX, Intel Celeron 366Mhz, AMD K6-450, AMD duron 600, AMD Thunderbird 1200mhz, AMD Athlon 64 x2 5600, AMD Phenom X3 720, Intel i5 4460, AMD Ryzen 5 3600 5800x3d


  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Misschien deze:
code:
1
   'SELECT * FROM song WHERE artist = ' + inttostr(aid) + ''' AND Title LIKE ''%''' + E2title.Text + '%'''


Maar een nog betere oplossing is:
code:
1
2
3
  Query.SQL.Text := 'SELECT * FROM song where artist = :aid AND Title like :Title';
  Query.Parameters.ParamByName('aid').Value:= aid;
  Query.Parameters.ParamByName('Title').Value:= '%' + E2title.Text + '%';
Dit voorkomt ook dat er een fout optreed als er een ' in de E2title edit staat.

[ Voor 190% gewijzigd door jelmervos op 08-06-2003 21:19 ]

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • Just_a_Gamer
  • Registratie: November 2001
  • Laatst online: 22:10
Bovenstaande is goed alleen de 2 quotes na de like ''% hoort er niet. Je hoeft namelijk na je procent teken geen quote af te sluiten dus:

code:
1
'SELECT * FROM song where artist = ' + inttostr(aid) + ' and Title like ''%' + E2title.Text + '%'''


edit: En na een integer hoeft ook geen quote afgesloten worden.

[ Voor 25% gewijzigd door Just_a_Gamer op 08-06-2003 21:20 ]


  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Oja, je hebt gelijk.

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • heuveltje
  • Registratie: Februari 2000
  • Laatst online: 21-08 22:37

heuveltje

KoelkastFilosoof

Topicstarter
dank u !
zat dus compleet in de verkeerde hoek te zoeken naar een fout |:(

ga eens even naar parambijname
ziet er toch iets duidelijker uit dan die ''''''''''' zooi :)
iig compileert dit al. das al een hele vooruitgang :)

Heuveltjes CPU geschiedenis door de jaren heen : AMD 486dx4 100, Cyrix PR166+, Intel P233MMX, Intel Celeron 366Mhz, AMD K6-450, AMD duron 600, AMD Thunderbird 1200mhz, AMD Athlon 64 x2 5600, AMD Phenom X3 720, Intel i5 4460, AMD Ryzen 5 3600 5800x3d


  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Niet alleen duidelijker maar heeft ook nog nut, zie mijn laatste note in mijn eerste post in dit topic.

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • heuveltje
  • Registratie: Februari 2000
  • Laatst online: 21-08 22:37

heuveltje

KoelkastFilosoof

Topicstarter
OK deel 2 ;(

ondertussen al uren te turen maar ik zie het niet.......
ik probeer dus de " nette " manier te implementeren

eerst : dit is de "vieze" manier........
code:
1
2
3
4
5
6
7
8
9
10
  title1 := E2title.Text ;
  SQLQuery1.Close ;
  SQLQuery1.SQL.Clear ;
  SQLQuery1.SQL.Add('SELECT * FROM song WHERE Title LIKE ''%' + title1 + '%'' AND artist = '+ inttostr(aid)  );
  SQLQuery1.open ;

   If SQLQuery1.RecordCount > 0 then
    begin //soortgelijk nr gevonden
       ShowMessage('hoi');
    end;


en die werkt
maar goed we wouden het net maken

code:
1
2
3
4
5
6
7
8
9
  title1 := E2title.Text ;
  SQLQuery1.Close ;
  SQLQuery1.SQL.Clear ;
  sqlQuery1.SQL.Text := 'SELECT * FROM song where artist = :aid AND Title like :Title';
   sqlQuery1.ParamByName('aid').Value := inttostr(aid);
   sqlQuery1.ParamByName('Title').Value := '''%' + E2title.Text + '%''' ;
  SQLQuery1.open ;

end ;  (einde van functie, doe dus nog niks met de uitkomst)


dit lijkt goed te gaan. geen compiler fouten
en ook als ik het execute geen problemen

tot ik dit stukje code er weer achter zet...........
code:
1
2
3
4
   If SQLQuery1.RecordCount > 0 then
    begin //soortgelijk nr gevonden
       ShowMessage('hoi');
    end;


lijkt me een vrij onschuldig stukje
zelfs als heel de uitkomst fucked op was zou ie nog steeds 0 of groter dan 0 zijn (toch ?)
maar zodra ik het nu run :
DbExpress error : operation not supported

ik kan hem niet volgen. blijkbaar is de querry goed, anders lijkt me dat ie al eerder fouten zou geven
maar waarom kan ik dan geen recordcount opvragen :?

Heuveltjes CPU geschiedenis door de jaren heen : AMD 486dx4 100, Cyrix PR166+, Intel P233MMX, Intel Celeron 366Mhz, AMD K6-450, AMD duron 600, AMD Thunderbird 1200mhz, AMD Athlon 64 x2 5600, AMD Phenom X3 720, Intel i5 4460, AMD Ryzen 5 3600 5800x3d


  • Just_a_Gamer
  • Registratie: November 2001
  • Laatst online: 22:10
Direct uit delphi help file :) :
Reading RecordCount will generate an exception if the dataset can’t determine the number of records. Do not read RecordCount if

The dataset represents stored procedure.
The dataset represents a query that contains parameters.
The dataset represents a multi-table join.
Dus wat je wil doen kan helemaal niet met parameters

Misschien een workarround is om eigen recordcount te maken door zelf ff de records te tellen met een while loop

code:
1
2
3
4
5
6
SQLQuery1.First

while not SQLQuery1.EOF do 
begin
  inc( JouwTeller );
end;


edit: Of gebruik de functie IsEmpty |:(

[ Voor 27% gewijzigd door Just_a_Gamer op 11-06-2003 22:17 ]


  • heuveltje
  • Registratie: Februari 2000
  • Laatst online: 21-08 22:37

heuveltje

KoelkastFilosoof

Topicstarter
Just_a_Gamer schreef op 11 June 2003 @ 22:12:
Direct uit delphi help file :) :


[...]


Dus wat je wil doen kan helemaal niet met parameters
Um
forgive me als ik fout lig te denken
(hoe meer ik lees hoe minder ik van de delphi implementatie van sql snap)

maar
The dataset represents a query that contains parameters.
maar als ik die query geopend heb
dan staan daar toch geen parameters meer in ?
dan staan er alleen de uitkomst lijkt me (array van rows dus oid)

of denk ik nou helemaal verkeerd

Heuveltjes CPU geschiedenis door de jaren heen : AMD 486dx4 100, Cyrix PR166+, Intel P233MMX, Intel Celeron 366Mhz, AMD K6-450, AMD duron 600, AMD Thunderbird 1200mhz, AMD Athlon 64 x2 5600, AMD Phenom X3 720, Intel i5 4460, AMD Ryzen 5 3600 5800x3d


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:57
Just_a_Gamer schreef op 11 juni 2003 @ 22:12:
Direct uit delphi help file :) :


code:
1
2
3
4
5
6
SQLQuery1.First

while not SQLQuery1.EOF do 
begin
  inc( JouwTeller );
end;


edit: Of gebruik de functie IsEmpty |:(
Als je het zo doet, kan je even goed een SELECT count() doen ook hoor.... Dat zal veel performanter zijn als je het aantal records wilt weten vooraleer je door je recordset wilt loopen.

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:57
heuveltje schreef op 11 June 2003 @ 22:19:
[...]


Um
forgive me als ik fout lig te denken
(hoe meer ik lees hoe minder ik van de delphi implementatie van sql snap)
Er is niet zoiets als de 'Delphi implementatie van SQL' hoor.
SQL is een taal, die je kan embedden in een ander programma (bv een Delphi programma).
The dataset represents a query that contains parameters.
maar als ik die query geopend heb
dan staan daar toch geen parameters meer in ?
dan staan er alleen de uitkomst lijkt me (array van rows dus oid)
Je denkt verkeerd.
Je opent je query wel met parameters.

https://fgheysels.github.io/


  • Just_a_Gamer
  • Registratie: November 2001
  • Laatst online: 22:10
Nou dat probleem weet ik ook niet zeker maar een quote van Wayne Niddery( TeamB ) uit google groups:
RecordCount should not be used with query components. The property is
inherited from the base TDataset class. In order to get a recordcount
against an sql server, the component either needs to fetch all records and
count them locally, or execute an additional query against the server to ask
it for the count. Both can be detrimental and in the latter case, depending
on your query, it cannot always be done.
http://groups.google.nl/g...lm=3bd5f4b6%241_2%40dnews

  • heuveltje
  • Registratie: Februari 2000
  • Laatst online: 21-08 22:37

heuveltje

KoelkastFilosoof

Topicstarter
Just_a_Gamer schreef op 11 juni 2003 @ 22:12:
wat je wil doen kan helemaal niet met parameters

Misschien een workarround is om eigen recordcount te maken door zelf ff de records te tellen met een while loop

code:
1
2
3
4
5
6
SQLQuery1.First

while not SQLQuery1.EOF do 
begin
  inc( JouwTeller );
end;


edit: Of gebruik de functie IsEmpty |:(
hmmm wazig
nou ja isEmpty lijkt te werken

al snap ik absoluut niet waarom recordcount niet meer werkt :?
lijkt me eerder een bug dan iets logisch.

weet jij zo of er nog meer beperkingen gelden zodra ik params ga gebruiken.
andersom zoeken in de help schiet niet op :(

Heuveltjes CPU geschiedenis door de jaren heen : AMD 486dx4 100, Cyrix PR166+, Intel P233MMX, Intel Celeron 366Mhz, AMD K6-450, AMD duron 600, AMD Thunderbird 1200mhz, AMD Athlon 64 x2 5600, AMD Phenom X3 720, Intel i5 4460, AMD Ryzen 5 3600 5800x3d


  • Just_a_Gamer
  • Registratie: November 2001
  • Laatst online: 22:10
whoami schreef op 11 June 2003 @ 22:29:
[...]


Als je het zo doet, kan je even goed een SELECT count() doen ook hoor.... Dat zal veel performanter zijn als je het aantal records wilt weten vooraleer je door je recordset wilt loopen.
Daarom gebruik functie IsEmpty ;)
heuveltje schreef op 11 juni 2003 @ 22:32:
[...]


hmmm wazig
nou ja isEmpty lijkt te werken

al snap ik absoluut niet waarom recordcount niet meer werkt :?
lijkt me eerder een bug dan iets logisch.

weet jij zo of er nog meer beperkingen gelden zodra ik params ga gebruiken.
andersom zoeken in de help schiet niet op :(
De meeste dingen staan in Delphi Help. Beetje zoeken kan geen kwaad. :) Ik heb weleens met Dbexpress componenten gewerkt. Maar ik heb de hele tijd zonder parameters gewerkt. ( Was namelijk niet nodig ). Wat je rekening moet houden met dbExpress is dat je niet terug kan gaan naar vorige record. Je kan alleen vooruit. Het ligt niet aan de implementatie van dbExpress.

[ Voor 55% gewijzigd door Just_a_Gamer op 11-06-2003 22:37 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:57
heuveltje schreef op 11 juni 2003 @ 22:32:
[...]


al snap ik absoluut niet waarom recordcount niet meer werkt :?
lijkt me eerder een bug dan iets logisch.
't Is geen bug, 't is zelfs logisch.

De query component kan in bepaalde gevallen niet weten hoeveel rijen hij returned. Vandaar....

https://fgheysels.github.io/


  • heuveltje
  • Registratie: Februari 2000
  • Laatst online: 21-08 22:37

heuveltje

KoelkastFilosoof

Topicstarter
whoami schreef op 11 juni 2003 @ 22:29:
[...]


Als je het zo doet, kan je even goed een SELECT count() doen ook hoor.... Dat zal veel performanter zijn als je het aantal records wilt weten vooraleer je door je recordset wilt loopen.
op zich true
maar ik ga toch door al die records heenlopen dus om ze dan weer op te vragen leek me wat omslachtig.........

maar goed. ik had gewoon niet verwacht dat recordcount zon rare excepties had, leek me een standaard opdracht.
whoami schreef op 11 juni 2003 @ 22:30:
[...]

Er is niet zoiets als de 'Delphi implementatie van SQL' hoor.
SQL is een taal, die je kan embedden in een ander programma (bv een Delphi programma).
ehm jawel. das de manier waarop delphi sql implementeerd (dmv oa sqlquery)
en de stortvloed aan extra methods en variable die eraan hangen.
ik bedoel dit is de php implementatie
[code]
$result = mysql_query("SELECT * FROM todo WHERE td_int = '$up'", $db);
$myrow = mysql_fetch_row($result) ;
[code]
die vink persoonlijk nou een heel stuk helderder...........
[...]

Je denkt verkeerd.
Je opent je query wel met parameters.
ja maar als ik die query open dan houd ie daarna toch alleen results over ?
mag toch niet uitmaken hoe ie daar aan kwam , of probeert ie uit de query het aantal velden te lezen zonder deze uit te voeren :?

Heuveltjes CPU geschiedenis door de jaren heen : AMD 486dx4 100, Cyrix PR166+, Intel P233MMX, Intel Celeron 366Mhz, AMD K6-450, AMD duron 600, AMD Thunderbird 1200mhz, AMD Athlon 64 x2 5600, AMD Phenom X3 720, Intel i5 4460, AMD Ryzen 5 3600 5800x3d


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:57
heuveltje schreef op 11 juni 2003 @ 22:42:
[...]


op zich true
maar ik ga toch door al die records heenlopen dus om ze dan weer op te vragen leek me wat omslachtig.........
Als je er 2x door looped, dan moet je je pointer terug naar het eerste record brengen.
Het is het loopen door een recordset dat het langst duurt, niet het ophalen van de records.
Test het maar eens uit bij een query die veel records teruggeeft.
Doe eens een select count() en kijk eens hoe lang dat duurt, en doe eens een select * en loop eens door de recordset om te tellen hoeveel records je krijgt.
heuveltje schreef op 11 juni 2003 @ 22:42:
[...]


ehm jawel. das de manier waarop delphi sql implementeerd (dmv oa sqlquery)
en de stortvloed aan extra methods en variable die eraan hangen.
ik bedoel dit is de php implementatie
[code]
$result = mysql_query("SELECT * FROM todo WHERE td_int = '$up'", $db);
$myrow = mysql_fetch_row($result) ;
[code]
die vink persoonlijk nou een heel stuk helderder...........
Delphi implementeert SQL niet. PHP ook niet.
Ze bieden gewoon een manier aan om met databases te communiceren dmv SQL. ZE veranderen niets aan de SQL syntax / dialect van de databank waar ze mee praten.

[ Voor 36% gewijzigd door whoami op 11-06-2003 22:47 ]

https://fgheysels.github.io/


  • heuveltje
  • Registratie: Februari 2000
  • Laatst online: 21-08 22:37

heuveltje

KoelkastFilosoof

Topicstarter
whoami schreef op 11 June 2003 @ 22:37:
[...]

't Is geen bug, 't is zelfs logisch.

De query component kan in bepaalde gevallen niet weten hoeveel rijen hij returned. Vandaar....
wat is daar zo logisch aan ?
* heuveltje probeert het echt te snappen

waarom kan hij het wel als
sql.add ('SELECT * FROM song where artist = ' + inttostr(aid))
maar niet als
.SQL.Text := 'SELECT * FROM song where artist = :aid';
sqlQuery1.Params[0].Asinteger := aid


dat is uiteindelijk toch dezelfde querry :?

en dat het niet al te efficient is is me duidelijk, maar waarom zou ie niet gewoon alle velden kunnen tellen en tot 0 komen.

Heuveltjes CPU geschiedenis door de jaren heen : AMD 486dx4 100, Cyrix PR166+, Intel P233MMX, Intel Celeron 366Mhz, AMD K6-450, AMD duron 600, AMD Thunderbird 1200mhz, AMD Athlon 64 x2 5600, AMD Phenom X3 720, Intel i5 4460, AMD Ryzen 5 3600 5800x3d


  • heuveltje
  • Registratie: Februari 2000
  • Laatst online: 21-08 22:37

heuveltje

KoelkastFilosoof

Topicstarter
Just_a_Gamer schreef op 11 juni 2003 @ 22:33:
[...]


Daarom gebruik functie IsEmpty ;)


[...]


De meeste dingen staan in Delphi Help. Beetje zoeken kan geen kwaad. :) Ik heb weleens met Dbexpress componenten gewerkt. Maar ik heb de hele tijd zonder parameters gewerkt. ( Was namelijk niet nodig ). Wat je rekening moet houden met dbExpress is dat je niet terug kan gaan naar vorige record. Je kan alleen vooruit. Het ligt niet aan de implementatie van dbExpress.
ja maar zoeken op iets wat je in de toekomst tegen kan komen is lastig :)
ik deed het in 1e instantie ook zonder. zie topic start maar :)
maar dit leek me een veel nettere manier.

ondertussen ben ik echt baffeld is de manier waarop delphi/dbExpress omgaat met results
ik verwachte gewoon simpel een arraytje velden over houden, maar ip daarvan krijg ik results die ik maar 1 keer mag lezen :?

Heuveltjes CPU geschiedenis door de jaren heen : AMD 486dx4 100, Cyrix PR166+, Intel P233MMX, Intel Celeron 366Mhz, AMD K6-450, AMD duron 600, AMD Thunderbird 1200mhz, AMD Athlon 64 x2 5600, AMD Phenom X3 720, Intel i5 4460, AMD Ryzen 5 3600 5800x3d


  • Just_a_Gamer
  • Registratie: November 2001
  • Laatst online: 22:10
heuveltje schreef op 11 June 2003 @ 22:42:
[...]


op zich true
maar ik ga toch door al die records heenlopen dus om ze dan weer op te vragen leek me wat omslachtig.........

maar goed. ik had gewoon niet verwacht dat recordcount zon rare excepties had, leek me een standaard opdracht.
Deze rare exceptions treedt niet op als je "oude" bde componenten gebruikt. Overigens vind ik geen rare exceptie :+ tis toch vrij netjes opgevangen :P
heuveltje schreef op 11 juni 2003 @ 22:49:
[...]


wat is daar zo logisch aan ?
* heuveltje probeert het echt te snappen

waarom kan hij het wel als
sql.add ('SELECT * FROM song where artist = ' + inttostr(aid))
maar niet als
.SQL.Text := 'SELECT * FROM song where artist = :aid';
sqlQuery1.Params[0].Asinteger := aid


dat is uiteindelijk toch dezelfde querry :?

en dat het niet al te efficient is is me duidelijk, maar waarom zou ie niet gewoon alle velden kunnen tellen en tot 0 komen.
Tis overigens niet hetzelfde als je met parameters gebruikt. Als je parameters gebruikt dan zal DBexpress de sql voor proberen op te bouwen. Dus als de datatype integer is dan zet ie geen quotes omheen etc. Dbexpress bepaalt dan hoe de query voor jou uitziet.

Je moet gewoon accepteren dat dbExpress aantal dingen niet kunnen want met gewone TQuery wel kan. Borland heeft getracht al die dingen die missen iets anders op te lossen.

  • Just_a_Gamer
  • Registratie: November 2001
  • Laatst online: 22:10
heuveltje schreef op 11 juni 2003 @ 22:57:
[...]


ja maar zoeken op iets wat je in de toekomst tegen kan komen is lastig :)
ik deed het in 1e instantie ook zonder. zie topic start maar :)
maar dit leek me een veel nettere manier.

ondertussen ben ik echt baffeld is de manier waarop delphi/dbExpress omgaat met results
ik verwachte gewoon simpel een arraytje velden over houden, maar ip daarvan krijg ik results die ik maar 1 keer mag lezen :?
Dan heb je de dbExpress niet goed begrepen. Het idee achter dbExpress is dat het alleen vooruit kan gaan in die resultset. Als je aan het einde van de resultset bent en je wilt ergens in het midden van de resultset een record ophalen dan moet je eerst de procedure First aanroepen en van vooraf aan de resultset aflopen.

Het is dus niet zo dat je maar 1 keer mag lezen.

Nu ik er over denk over dat select query met count. Stel dat gebruiker 1 haalt voert die query uit maar gebruiker 2 verwijderd een record uit de desbetreffende tabel. Dan heb je toch probleem :) ( misschien begrijpbaar :+ )

  • heuveltje
  • Registratie: Februari 2000
  • Laatst online: 21-08 22:37

heuveltje

KoelkastFilosoof

Topicstarter
whoami schreef op 11 June 2003 @ 22:46:
[...]


Als je er 2x door looped, dan moet je je pointer terug naar het eerste record brengen.
Het is het loopen door een recordset dat het langst duurt, niet het ophalen van de records.
Test het maar eens uit bij een query die veel records teruggeeft.
Doe eens een select count() en kijk eens hoe lang dat duurt, en doe eens een select * en loop eens door de recordset om te tellen hoeveel records je krijgt.
ik zit/zat gewoon met de php "implementatie" in me hoofd
daar stel je 1 keer die query. daar komt een array van records uit.
en dan is de sql server klaar
en dan kun je eindeloos gaan muggeziften met de resultaten en rechtstreeks naar
records gaan en weet ik wat nog meer ;)

in db express werkt dat allemaal blijkbaar compleet anders


[...]
[qoute]
Delphi implementeert SQL niet. PHP ook niet.
Ze bieden gewoon een manier aan om met databases te communiceren dmv SQL. ZE veranderen niets aan de SQL syntax / dialect van de databank waar ze mee praten.[/quote]

dit word woordkloverij.................
delphi bouwt een hele santekraam aan componenten en methodes aan om iets uit die Mysql db gerammeld te krijgen. in php doe ik dat met 4 regels code
en dat wat er uiteindelijk richting server gaat in allebei de gevallen gelijk is snap ik ook nog wel.

voor mij is de implementatie wat ik moet doen om die query richting Mysql te sturen. en de results uit te lezen.......................

Heuveltjes CPU geschiedenis door de jaren heen : AMD 486dx4 100, Cyrix PR166+, Intel P233MMX, Intel Celeron 366Mhz, AMD K6-450, AMD duron 600, AMD Thunderbird 1200mhz, AMD Athlon 64 x2 5600, AMD Phenom X3 720, Intel i5 4460, AMD Ryzen 5 3600 5800x3d


  • heuveltje
  • Registratie: Februari 2000
  • Laatst online: 21-08 22:37

heuveltje

KoelkastFilosoof

Topicstarter
Just_a_Gamer schreef op 11 juni 2003 @ 23:01:
[...]


Dan heb je de dbExpress niet goed begrepen.
laat dat duidelijk zijn ;(
Het idee achter dbExpress is dat het alleen vooruit kan gaan in die resultset. Als je aan het einde van de resultset bent en je wilt ergens in het midden van de resultset een record ophalen dan moet je eerst de procedure First aanroepen en van vooraf aan de resultset aflopen.

Het is dus niet zo dat je maar 1 keer mag lezen.
hmmm das lekker nuttig :(
nou ja,. voor mijn simpel apje moet dat geen probleem zijn........
ik doe het wel gewoon zonder params for the moment........

denk dat ik me maar nog moet gaan verdiepen in delphi en db's
er moet toch wel een simpeler manier zijn om dit te bereiken ...................

* heuveltje begint php steeds liever te vinden............


[qoute]
Nu ik er over denk over dat select query met count. Stel dat gebruiker 1 haalt voert die query uit maar gebruiker 2 verwijderd een record uit de desbetreffende tabel. Dan heb je toch probleem :) ( misschien begrijpbaar :+ )[/quote]
sja gelukkig ben ik de enige user 8)
maar is idd maar een link puntje. je kunt de "index out of bounds" wel aan voelen komen. al zou het wel heel toevallig zijn als dat gelijktijdig gebeurt.......

Heuveltjes CPU geschiedenis door de jaren heen : AMD 486dx4 100, Cyrix PR166+, Intel P233MMX, Intel Celeron 366Mhz, AMD K6-450, AMD duron 600, AMD Thunderbird 1200mhz, AMD Athlon 64 x2 5600, AMD Phenom X3 720, Intel i5 4460, AMD Ryzen 5 3600 5800x3d


  • Just_a_Gamer
  • Registratie: November 2001
  • Laatst online: 22:10
Ow nog een puntje als je in TSQLQuery gebruikt. Als je hardcoded enters in je query zet zoals #13#10 voor de leesbaarheid voor jezelf. Doe het liever niet ;) Dat vind TSQLQuery volgens mij ook niet leuk :P

Deze bugje heb ik opgemerkt in Delphi 6.

[ Voor 14% gewijzigd door Just_a_Gamer op 12-06-2003 01:07 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:57
Just_a_Gamer schreef op 11 juni 2003 @ 23:01:
[...]

Nu ik er over denk over dat select query met count. Stel dat gebruiker 1 haalt voert die query uit maar gebruiker 2 verwijderd een record uit de desbetreffende tabel. Dan heb je toch probleem :) ( misschien begrijpbaar :+ )
Tja, dan kan je wel altijd een probleem hebben. Door de recordset loopen om te tellen lost dat probleem echter niet op.
Ook de RecordCount method zou dat probleem niet oplossen.

Het gaat erom dat de view die user A op de data heeft, zoveel records telt.

https://fgheysels.github.io/


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

heuveltje schreef op 11 June 2003 @ 23:13:
[...]


ik zit/zat gewoon met de php "implementatie" in me hoofd
daar stel je 1 keer die query. daar komt een array van records uit.
en dan is de sql server klaar
en dan kun je eindeloos gaan muggeziften met de resultaten en rechtstreeks naar
records gaan en weet ik wat nog meer ;)

in db express werkt dat allemaal blijkbaar compleet anders
dbExpress en ADO.Net zijn tot het inzicht gekomen dat het cachen van het resultaat van een query niet altijd gewenst is en dat je in veel gevallen alleen vooruit door een recordset heengaat. Het is in webapplicaties vaak zeer overbodig en je hebt op de client geheugen nodig om het resultaat te bewaren en de cursor bij te houden. Als de client wel de gemakken wil van een cached dataset kan dat ook. Dan zijn alle mogelijkheden wel weer beschikbaar, behalve een recordcount dat gewoonweg niet de manier is van RDBMSsen die gebaseerd zijn op SQL. In Delphi heb je daar de TClientDataSet icm een provider voor, maar dbExpress heeft ook een all-in-one component genaamd TSimpleDataset.

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


Verwijderd

Just_a_Gamer schreef op 11 June 2003 @ 22:33:
[...]

Wat je rekening moet houden met dbExpress is dat je niet terug kan gaan naar vorige record. Je kan alleen vooruit. Het ligt niet aan de implementatie van dbExpress.
Dat ligt aan het type cursor dat je gebruikt. (En dus de manier van openen van je database/recordset)
Pagina: 1