Avatar billede spil2vind Nybegynder
11. april 2011 - 12:04 Der er 13 kommentarer og
1 løsning

Mister ODBC database forbindelse

Skal til at lære at bruge sql kald via delphi og ODBC forbindelse, men har problemer med at jeg mister forbindelse efter første kald hvis der går mere end 30 sekunder før næste kald, har prøvet at undersøge muligheder med reset reconnect og i den dur, men har ikke fundet noget brugbart, er der nogen der lige kan skubbe mig videre. Nedenstående går godt første gang, men forsøges igen efter 40 sekunder kommer fejlen

Jeg bruger

    ADOConnection1.Open();
    DatabaseForbindelse := true;
    q1.SQL.Text:=memo1.text;
    q1.Open;
    while not q1.Eof do begin
        q1.Next;
    end;
    q1.Close;
    ADOConnection1.Close;

q1 er type TADOQuery
ADOConnection1 er type TADOConnection

Bruger delphi 2010 og får fejlen raised exception class EOleException with message '[MySQL][ODBC 3.51 Driver][mysqld-5-1.51-log]MySQL server has gone away
Avatar billede hrc Mester
11. april 2011 - 12:55 #1
Mit umiddelbare bud er at åbne og lukke forbindelsen via formens OnCreate og OnDestroy og hold den åben mens programmet kører (eller de tilsvarende events i et datamodul).

I øvrigt kan du vist også lave din kopiering af scriptet sådan her: q1.SQL.Assign(memo1.Lines);
Avatar billede hrc Mester
11. april 2011 - 12:58 #2
Er din ADOconnections KeepConnection sat til false?
Avatar billede spil2vind Nybegynder
11. april 2011 - 13:05 #3
Ja den er sat til true og timeout er sat til 30

Den med formens onreate og detroy duer ikke når formen er åben hele tiden
Avatar billede a_nor Nybegynder
11. april 2011 - 13:37 #4
Hvad bruger du 'DatabaseForbindelse := true;' til ? Den skulle vel være sat false ved ADOConnection1.Close;
Avatar billede spil2vind Nybegynder
11. april 2011 - 13:44 #5
En værdi jeg ikke har fået fjernet, blev brugt til at checke manuelt om der var blevet udført sql kald
Avatar billede hrc Mester
11. april 2011 - 14:50 #6
Hvorfor dur det ikke at have forbindelsen åben hele tiden? Jeg forbinder på den måde og lukker først sammen med programmet. Mener du den er åben hele året?

Du skal til gengæld sørge for at lukke dine dataset (queries / tables)
Avatar billede spil2vind Nybegynder
11. april 2011 - 15:14 #7
Har prøvet det med at åbne når programmet startes og lukkes ned, men fejlen kommer alligevel, skal man sende noget for at holde forbindelsen åben?
Avatar billede hrc Mester
12. april 2011 - 14:05 #8
Så er jeg på bar bund. Hvis du opretter forbindelsen ved start og lukker ved afslut, så er det helet analogt til hvad jeg gør i mine programmer - og de har aldrig brokket sig. Meget underligt! Er det din egen server eller forbinder du til en i Zimbabwe? Kører det evt. via trådløst netværk?

Jeg ville have skrevet koden således og der er jo næsten ingen forskel:

ADOConnection1.Open();
try
  fDatabaseForbindelse := true;
  q1.SQL.Assign(memo1.Lines);
  q1.Open;
  try
    while not q1.Eof do
    begin
      q1.Next;
    end;
  finally
    q1.Close;
  end;
finally
  ADOConnection1.Close;
end;

Det her burde også virke:

q1.SQL.Assign(memo1.Lines);
q1.Open;
try
  while not q1.Eof do
  begin
    q1.Next;
  end;
finally
  q1.Close;
end;
Avatar billede hrc Mester
12. april 2011 - 14:06 #9
Kan du holde liv i forbindelsen ved at køre scriptet hver 10'ende sekund?
Avatar billede spil2vind Nybegynder
12. april 2011 - 16:47 #10
Det virker fint hvis jeg henter data hvert 10 sekund og mysql serveren står hos web10.dk, kan det være deres firewall eller hvad kan tabe forbindelsen?
Avatar billede spil2vind Nybegynder
12. april 2011 - 16:48 #11
Når jeg nu taber forbindelsen, hvordan kan man så genetablere forbindelse igen når man får fejlen?
Avatar billede hugopedersen Nybegynder
12. april 2011 - 17:04 #12
Bare en kommentar: Jeg har også en MySQL hos Web10 og der har jeg også prøvet at lave en connection til fra et Delphi program. Jeg bruger godt nok UniDAC, men det er ikke det der er afgørende.
Jeg havde nogenlunde samme problemer som dig. Kunne connecte, men efter et stykke tid så forsvandt forbindelsen og selv om UniDAC var sat op til at genskabe forbindelse, så lykkedes det aldrig at få det til at virke.

Jeg kan så til gengæld også huske at mit SQLyog administrationsprogram havde det samme problem i en tidligere version. Men de sidste versioner har det ikke været et problem.
Avatar billede spil2vind Nybegynder
12. april 2011 - 22:23 #13
OK, smider du et svar HRC idet jeg betragter fejlen som et timeout problem i en firewall eller andet lign., du bekræftede mig i min brug af komponenterne, så har valgt at løse det på nedenstående måde

ADOConnection1.Destroy;
ADOConnection1 := TADOConnection.Create(Self);
ADOConnection1.ConnectionString := '........';
ADOConnection1.Open();
ADOQuery1.Connection := ADOConnection1;
Avatar billede hrc Mester
13. april 2011 - 10:52 #14
OK, held og lykke.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester