Avatar billede fhansen Praktikant
24. marts 2010 - 19:10 Der er 14 kommentarer og
1 løsning

mistet forbindelse til mysql

Hej allesammen.

Jeg har en form, der bruges til at oprette lejekontrakter, det fungere også fint, så længe at man opretter en kontrakt, i en fart, men er man for lang tid om det, opstår der fejl, ved kald af applyupdates, rutinen stopper her, uden nogen form fejlmeldning.

Databasen ligger på nettet, og jeg bruger MyDac fra Corelab, og Delphi 7.

Finn
Avatar billede vallemanden Nybegynder
24. marts 2010 - 19:42 #1
det er din mysql database det er galt med, ret timeout
Avatar billede fhansen Praktikant
24. marts 2010 - 20:11 #2
hmmm, det er en database der er hosted hos Siminn, og mener ikke at jeg selv har en mulighed for at ændre timeout, jeg kan at wait time er sat til 20.
I MyDac kan jeg sætte connectiontimeout, men dette har ingen betydning.
Avatar billede erikjacobsen Ekspert
24. marts 2010 - 20:38 #3
Du kan vel holde forbindelsen lukket generelt, og kun åbne den ganske kort, når du skal læse eller skrive.
Avatar billede fhansen Praktikant
24. marts 2010 - 21:05 #4
jeg åbner jo forbindelsen i det øjeblik jeg kalder Insert, men kunne måske lave det som en sql query, men er der ikke nogen problemmer med last_insertid, hvis man bruger sql_query.

Jeg bliver nok også nødt til at sætte mig ind stored procedure.
Avatar billede erikjacobsen Ekspert
24. marts 2010 - 23:47 #5
Men det du siger er. at du holder forbindelsen åben mens man taster?

Der er ikke problemer med at finde det sidste ID i SQL - man skal nok bare gøre det på en anden måde.
Avatar billede fhansen Praktikant
24. marts 2010 - 23:56 #6
Ja det er korrekt, forbindelsen er åben , fra det øjeblik man kalder insert, og det gør jeg i øjeblikket idet jeg brger dataaware components. Det problem vil jeg ikke have hvis jeg bruger en sql query.
Programmet kørte tidligere på en local database.
Avatar billede hugopedersen Nybegynder
25. marts 2010 - 16:27 #7
På din connection kan du under ConnectionLost sætte RetryMode := rmReconnectExecute;

Det løser i hvert fald problemet på UniDAC som er 'storebror' til MyDAC

Jeg havde selv problemet tidligere indtil jeg fandt den lille fidus.
Jeg opretter dog connection 1 gang for alle i et datamodul om refererer til den.
Avatar billede fhansen Praktikant
30. marts 2010 - 10:11 #8
Hugo jeg har sat ConnectionLost, ligesom jeg også opretter connection til alle query's i et datamodul.

Min løsning blev dette.

DateTimeToString(Date1,'yyyy-mm-dd',Fcal.Date);
DateTimeToString(Date2,'yyyy-mm-dd',Tcal.Date);
Rental.Open;
Rental.SQLInsert.Text :='Insert INTO rental (Client, Rentaltype, Cost, Fdate, Tdate, Berth) '+
'VALUES '+
'('+quotedStr(ClientSql.FieldByName('Nummer').AsString)+','+quotedStr(RentalCost.FieldByName('Rtype').AsString)+','+quotedStr(FloatToStr(RentMainFrame1.RentFrame12.RentValue.Value))+','+quotedStr(Date1)+','+quotedStr(Date2)+','+quotedStr(RentMainFrame1.RentFrame12.Edit1.Text)+')';
If not DataM.MyConnection1.InTransaction  then
  DataM.MyConnection1.StartTransaction;
Rental.Insert;

Mit problem var at jeg før kaldte, Insert inden jeg fortog ændringer, var jeg så for lang tid om at lave disse ændringer, kunne jeg ikke kalde applyupdates, sikkert fordi mysql serverne havde lukket mig ude.
Jeg har valgt på dette tidspunkt at bruge QuotedStr(), da brugen af "" har drillet mig en del.

PS
Undskyld jeg har været længe om at komme videre, men skulle lige bygge et stengærde i haven.
Avatar billede hugopedersen Nybegynder
30. marts 2010 - 10:27 #9
Efter hvad jeg har lært om UniDAC så virker det lidt uoverskueligt det du gør.
Jeg bruger f.eks. nedenstående kode til at sikre mig at der er oprettet en record i min setuptabel før jeg bruger den.
Jeg har fundet ud af at SQL.Add er en stærk feature der laver en del af det check du har brug for.
Endvidere er ParamByName rigtig god at anvende.
Jeg kan dog se at du bruger transaktioner så det skal nok skrues anderledes sammen.

Ved du om der er nogen danske brugergrupper for MyDAC / UniDAC?
Det kunne være godt at have nogen at udveksle erfaringer med da dette er et meget stærkt produkt efter min mening.

procedure SetupInitialize;
var
  QueryOutput: TUniQuery;
begin
  if TableRecords(conTable_Setup) = 0 then
    begin
      QueryOutput := TUniQuery.Create(Nil);
      QueryOutput.Connection := frmDB_Conn.conDBserver;
      try
        QueryOutput.SQL.Clear;
        QueryOutput.SQL.Add('INSERT INTO ' + conTable_Setup);
        QueryOutput.SQL.Add('(fldsetup_id, fldtimestamp)');
        QueryOutput.SQL.Add('values (:fldsetup_id, :fldtimestamp)');
        QueryOutput.ParamByName('fldsetup_id').Value := 1;
        QueryOutput.ParamByName('fldtimestamp').Value := Now;
        try
          QueryOutput.Execute;
        except
          on E: exception do
            begin
              Logfile.Error(E.Message);
            end
        end;
      finally
        QueryOutput.Free;
      end;
    end;
end;
Avatar billede hugopedersen Nybegynder
30. marts 2010 - 10:29 #10
Logfile.Error er kald til min egen universalle logfilrutine
Avatar billede fhansen Praktikant
30. marts 2010 - 22:25 #11
Desværre kender jeg ikke nogen danske brugergrupper.

Din kode kræver vel at du har 2 querys en til vise data og en til insert.

Jeg bruger myquery.insertSql, men her er det ikke muligt at anvende ParamByName.

Jeg har dælme lært en hel del her på det sidste, og må desvæære nok indrømme at jeg har meget baggage med fra Paradox og tables tiden.

Jeg vil starte et nyt spørgsmål under Mysql, da jeg har et lille problem med en sql kode.
Avatar billede hugopedersen Nybegynder
01. april 2010 - 08:09 #12
OK det vil sige at du inserter i data du viser - det har jeg aldrig prøvet :-)

Jeg roder stadig med Paradox - jeg har en applikation der konverterer Paradox data til MySQL. Der er p.t. > 8.500.000 records bare i 1 tabel på MySQL. Men det går nu fint nok.
Avatar billede fhansen Praktikant
02. april 2010 - 00:09 #13
Ja det er sandt, det jeg gør, årsagen til denne løsning er at brugeren skal kunne se ændringerne med det samme, dette kunne selvfølgelig også opnåes med 2 query's.

Det var godt mange records, jeg har haft Mysql i 1½ år nu, helt uden problemmer, databasen bliver brugt både på en hjemmeside, og i et mit hprogram.
Avatar billede fhansen Praktikant
01. december 2010 - 22:38 #14
lig lige et svar, så jeg kan lukke
Avatar billede vallemanden Nybegynder
02. december 2010 - 10:04 #15
.
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