"The shell stopped unexpectedly and Explorer.exe was restarted."
Verwijderd
Dus niet:
'select * from Tabel where Datum = ''' + FormatDateTime('dd/mm/yyyy', dDate) + ''''
maar:
'select * from Tabel where Datum = :Datum'
en dan
ParamByName('Datum').AsDateTime := dDate
"The shell stopped unexpectedly and Explorer.exe was restarted."
1
2
| DateSeparator := '/'; DecimalSeparator := '.'; |
En later weer terug zetten.
"The shell stopped unexpectedly and Explorer.exe was restarted."
Zo kun je het wel oplossen, maar wat als je de landinstellingen veranderd? Of als je die applicatie op een andere pc installeert?Op donderdag 29 november 2001 17:30 schreef jelmervos het volgende:
Ik heb het goed werkend gekregen. Al moest ik wel voor de INSERT query dit doen:
code:
1 2 DateSeparator := '/'; DecimalSeparator := '.';
En later weer terug zetten.
https://fgheysels.github.io/
Bij mijn landinstellingen staat een komma als decimaal scheidings teken. Maar de database die ik gebruik wil een punt. Als ik een SELECT op die database doe krijg ik toch een komma (of wat ik maar instel bij Landinstellingen). Doe ik vervolgens een INSERT met gegevens die ik uit de SELECT heb gehaald erin dan pikt hij dit niet.Op donderdag 29 november 2001 18:56 schreef whoami het volgende:
[..]
Zo kun je het wel oplossen, maar wat als je de landinstellingen veranderd? Of als je die applicatie op een andere pc installeert?
"The shell stopped unexpectedly and Explorer.exe was restarted."
Hoe hebben jullie die opgelost?
"The shell stopped unexpectedly and Explorer.exe was restarted."
Die kan ik niet echt plaatsen in mijn probleemstelling:Op donderdag 29 november 2001 23:31 schreef Onno het volgende:
Wat dacht je van de oplossing van Afterlife?
Eerst een SELECT: krijg datum/komma getallen terug zoals ingesteld bij Landinstellingen. Prima verder.
Met die waarden een INSERT doen: database wil waarden met punten (komma getallen) en slashes (datum).
"The shell stopped unexpectedly and Explorer.exe was restarted."
Dan moet je de datum ook niet met .asString opvragen, maar met .asDate.Op donderdag 29 november 2001 23:43 schreef jelmervos het volgende:
Die kan ik niet echt plaatsen in mijn probleemstelling:
Eerst een SELECT: krijg datum/komma getallen terug zoals ingesteld bij Landinstellingen. Prima verder.
En dan een formate date gebruiken in de INSERT? Maar dan gebruikt hij nog de Landinstellingen van Windows, mits ik dus die DateSeperator e.d. wijzig.Op donderdag 29 november 2001 23:47 schreef Onno het volgende:
[..]
Dan moet je de datum ook niet met .asString opvragen, maar met .asDate.
"The shell stopped unexpectedly and Explorer.exe was restarted."
Alles opvragen m.b.v. .asdate o.i.d. Dan met de decode date het jaar, maand, dag etc. uit elkaar trekken. Dit de gebruiker ergens laten bewerken, er daarna met encodedate weet een tdate van maken, en deze weer in de database schrijven. (dus gewoon met die .asdate, dan laat je het de BDE lekker zelf uitzoeken wat er in de DB geschreven moet worden).
"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
Eh? Als jij gewoon met TDate's werkt, heb je toch helemaal niks te maken met die datumformatteringsmeuk?Op vrijdag 30 november 2001 09:07 schreef jelmervos het volgende:
En dan een formate date gebruiken in de INSERT? Maar dan gebruikt hij nog de Landinstellingen van Windows, mits ik dus die DateSeperator e.d. wijzig.
Da's misschien wel waar.Op vrijdag 30 november 2001 10:42 schreef Onno het volgende:
[..]
Eh? Als jij gewoon met TDate's werkt, heb je toch helemaal niks te maken met die datumformatteringsmeuk?
En hoe zit het dan met die decimale punt, precies hetzelfde zeker?
"The shell stopped unexpectedly and Explorer.exe was restarted."
Mooi, zal er vanmiddag even mee bezig. Iig bedankt Onno!Op vrijdag 30 november 2001 10:48 schreef Onno het volgende:
Jup.
"The shell stopped unexpectedly and Explorer.exe was restarted."
De INSERT query moet een string zijn.
De SELECT query kan wel een TDateTime terug geven (met die AsDate) maar zodat ik deze in de INSERT query wil gebruiken moet ik hem naar een string omzetten. Hierbij worden dus de schiedingstekens van de datum automatisch veranderd zoals ingesteld bij de Landinstellingen. Toch wil de database dit formaat hebben bij een INSERT query: mm/dd/yyyy
"The shell stopped unexpectedly and Explorer.exe was restarted."
Oh? Als je doet wat Afterlife suggereert hoef je je TDateTime nergens naar een string om te zetten hoor.Op vrijdag 30 november 2001 16:20 schreef jelmervos het volgende:
De SELECT query kan wel een TDateTime terug geven (met die AsDate) maar zodat ik deze in de INSERT query wil gebruiken moet ik hem naar een string omzetten.
Hoe kan ik dan ooit die INSERT doen. TQuery.SQL is toch echt van het type TStrings. Dus als ik TQuery.SQL.Text gebruik moet ik toch echt een String opgeven.Op vrijdag 30 november 2001 16:24 schreef Onno het volgende:
[..]
Oh? Als je doet wat Afterlife suggereert hoef je je TDateTime nergens naar een string om te zetten hoor.
Of doe ik nu weer iets geheel verkeerd?
"The shell stopped unexpectedly and Explorer.exe was restarted."
Dat wordt dus Query.SQL. (in jouw geval iets als 'insert into blabla values (:Datum)')Op donderdag 29 november 2001 08:34 schreef Afterlife het volgende:
'select * from Tabel where Datum = :Datum'
En daarna doe je dat om de waarde van de parameter :Datum in te vullen.en dan
ParamByName('Datum').AsDateTime := dDate
Wat snap je daar niet aan?
Niks, bedankt voor de uitleg! Het is gelukt.Op vrijdag 30 november 2001 16:51 schreef Onno het volgende:
Wat snap je daar niet aan?
Ik wist niet dat je gewoon :PARAM in een SQL kon stoppen en die parsen met ParamByName. Geweldig!
"The shell stopped unexpectedly and Explorer.exe was restarted."
Verwijderd
Bij client/server databases als Oracle, MSSQL, SyBase, InterBase, DB2, etc. geef je daarmee de database de mogelijkheid om een query te optimaliseren. De query blijft nl. steeds hetzelfde, en de database kan dan z'n eigen meest optimale PLAN uitbroeden (welke indexen te gebruiken, etc.).
Wanneer je zelf de parameter waarden al invult, is de query steeds anders, en heeft de database geen profijt van eerder verzamelde statistiek-gegevens.
De snelheidswinst die je daarmee haalt is meestal niet dramatisch, maar kan toch soms (moeilijke joins of selecties met veel voorwaarden in de where clause) wel een procent of 30 zijn. Maar dan moeten de indexen waar 'ie profijt van kan hebben al wel bestaan, natuurlijk.