28. januar 2006 - 20:28Der er
35 kommentarer og 1 løsning
DBExpress giver Access violation-fejl
Jeg er igang med at lave et program, som arbejder med en MySQL-database.
Jeg får imidlertid engang i mellem denne fejl: "Access violation at adress 00AA9334 in module dbexpressmysql.dll. Read of adress 00000002."
Den skriver imidlertid ikke noget om hvor i programmet fejlen opstår (linje eller noget lign), så hvordan finder jeg lige ud af hvor den fejl opstår?
Alle mine SQL-querys er af denne type: SQLQuery.Close; SQLQuery.SQL.Clear; SQLQuery.SQL.Add('SELECT * FROM userlist'); SQLQuery.Open; SQLQuery.First; while not SQLQuery.EOF do begin try ......... except end;
Hvad kan fejlen skyldes? MySQL-serveren (v5.0) køres på samme maskine som programmet afvikles fra.
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Jeg har læst og hørt at der ikke findes en DBExpress der understøtter MySQL versioner over 4.0.x, så der burde slet ikke virke når du bruger MySQL version 5.
Det fungerer nu fint - bortset fra at disse access-fejl dukker op.
Men hvis DBExpress kun understøtter op til v4.0.x, plus at jeg bruger libMySQL.dll fra MySQL5 (som VendorLib), så virker det da mystisk at det overhovedet virker.
Min er også en 4.0.xx med fil version 7.1.1523.17956. Jeg har spurgt på borland.dbexpress nyheds gruppen for lang tid siden men fik ikke noget svar, om der kommer en fra borland ved jeg så ikke.
Ved du om der er nogen større sikkerhedsrisiko ved at bruge MySQL Server 4.0.26 (som er den sidste v4.0-udgivelse)? Denne burde vel virke uden problemer med DBExpress?
Jeg bruger ikke nogen avancerede MySQL-kommandoer og har ikke specielt store tabeller, så hastighedsmæssigt mærker jeg næppe noget :)
Er du iøvrigt 100% sikker på at den access-fejl skyldes at jeg bruger MySQL5? :-)
Jeg har ikke sat mig ind i sikkerhedsrisikoen ved brug af MySQL så det kan jeg ikke svare på. Jeg har brugt MySQL version 4.0.17 siden den kom frem sammen med dbexpress og det har kørt 24/7 uden nogen problemer overhovedet. Om din fejl skyldes at du bruger MySQL 5 ved jeg ikke men hvis du prøver med 4.0.xx og fejlen forsvinder så var det nok derfor. Og så syntes jeg iøvrigt at der er for dårlig at der ikke er kommet en ny dbexpress driver fra borland.
Jeg må indrømme, at det virker fint, da jeg prøvede at lave en MySQL 4.0.26 installation på min bærbare maskine og lavede et testprogram i Delphi der.
Om installationer / afinstallationer af andre databaseprogrammer, herunder MySQL 5 mv., har givet anledning til problemer i opsætning eller lign. ved jeg ikke, men det virker mystisk, at det virker på min bærbare, men ikke på min stationære
Ikke andre, bare du sørger for at libmysql.dll er den der hører til den MySQL version du benytter så burde det virke. Jeg plejer at smide de 2 dll´er i samme mappe som min exe fil så er jeg sikker på at det er de rigtige der bruges. Og du har vel sat SQLConnection til at benytte de rigtige dll´er?
Jeg er iøvrig i gang med at rette denne her til at kunne bruges med MySQL 5.1, og bygge en lille simpel klasse omkring den. Det har dog nok ingen interesse for dem der vil bruge db?? komponenter. http://www.fichtner.net/delphi/mysql.delphi.phtml
Jo, den er jeg da interesseret i, når den er færdig.
Jeg ville gerne have vist indholdet af min DB i en StringGrid. Men det kan ikke umiddelbart lade sig gøre, kan jeg se.
Jeg har fundet ud af, at det er en unidirectional dataset. Det gør det mere besværligt... Betyder det i øvrigt, at man ikke kan gå fra post 4 til post 3 i end atabase uden videre?
Hvis du benytter en TClientDataSet kan du gå frem og tilbage som du har lyst, du kan bruge en TDataSetProvider til at få alle data fra din Query flyttet over i din TClientDataSet.
Kan også sige, at efter jeg har geninstalleret MySQL 4.0.26 samt Delphi, så virker det oggså på denne maskine nu. Så det er helt super...
Men kan jeg ikke lige presse citronen og få dig til at vise et lille eksempel på, hvordan en TClientDataset bruges til hhv. at hente data fra en database og derefter sætte data ind i en DBGrid.
Bare en kort introduktion vil også være fint nok, så kan jeg selv eksperimentere og lede videre. Jeg skal selvfølgelig have fat i SQL-sætninger - det er intet problem, men hvordan / hvornår de skal bruges i forhold til TClientDataSetet er nyt for mig.
Også at jeg umiddelbart kan få det til at virke / connecte til MySQL og vist data fra DB i mit eget project, men at dit demoproject går i ged.
men endnu engang tak skal du have.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.