24. marts 2010 - 19:10Der 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.
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.
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.
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.
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.
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;
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.
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.
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.