2016-09-07 8 views
0

リモートデータベースを使用するデスクトップアプリケーションを残念ながら残していますが、私はローカルデータベースまたはLANデータベースを使用していました。しかし、リモートデータベースを使用すると、 "mysqlサーバーがなくなってしまった"というエラーが頻繁に発生しました。私は、私がado.committransとado.begintransを実行しますが、私はado.closeまたはado.freeを実行しませんでした。私が使用してADOのどのような機能...この例を必要とし、ここで、iは、それらを置けばいいのDBGridか何かして示すなど、各トランザクションを.... 私のホスティング設定は次のとおりです。??mysqlサーバがなくなったのを避けるためにアドホック接続を使用する例が必要

> safe mode = Off (tidak dapat diubah) 

memory_limit = 256M (MAXIMUM) 

max_execution_time = 30 (MAXIMUM in seconds) 

max_input_time = 60 (MAXIMUM in seconds) 

post_max_size = 64M (MAXIMUM) 

upload_max_filesize = 64M (MAXIMUM) 

enable_dl = Off (tidak dapat diubah) 

Stimultan connection: 25 connections/koneksi 

**Time out without activity: 60 sec** 

私は私のprojの中でかしら。私は私のここでのアクティブ

を私の接続を維持しませんでしたコード:

Procedure TForm1.show; 
Begin 
with query do begin 
sql.clear;//menghapus query yang masih ada jika ada 
sql.Text:='select * from daftar where tanggal = curdate() order by id asc'; 
open;//membuka query 
end; 
end; 
    function AddLeadingZeroes(const aNumber, Length : integer) : string; 
begin 
    result := SysUtils.Format('%.*d', [Length, aNumber]) ; 
end; 
procedure TForm1.Button1Click(Sender: TObject); 
var 
a:string; 
begin 
a:=AddLeadingZeroes(strtoint(edit3.Text),4); 
edit3.text:=a; 
edit2.text:=AnsiUpperCase(edit2.text); 
if (edit2.text='') or (edit3.text='') 
    then 
    begin 
     showmessage('Nomor Medrek HARUS diisi terlebih dahulu'); 
     edit2.setfocus 
    end 
    else 
    begin 
     con.BeginTrans; 
     query1.SQL.Clear; 
     query1.SQL.text :='Select Nama from medrek where LETTER='+QuotedStr(edit2.text)+'AND ID='+QuotedStr(edit3.text)+';'; 
     Screen.Cursor:=crHourGlass; 
     query1.open; 
     If query1.RECORDCOUNT = 0 
     Then 
      begin 
      ShowMessage('NOMOR MEDREK BELUM TERDAFTAR') ; 
      edit1.Color := clMaroon; 
      edit1.clear ; 
      con.CommitTrans; 
      end 
     ELSE 
      begin 
      edit1.text := query1.FieldByName('Nama').AsString; 
      edit1.Color := clYellow; 
      query.Requery(); 
      con.CommitTrans; 
      END; 
    query1.close; 
    Screen.Cursor:=crDefault; 

    end 

end; 

procedure TForm1.Button2Click(Sender: TObject); 

begin 

if (edit1.text='') or (combobox1.text='') or (combobox2.text='') or (combobox3.text='') or (combobox4.text='') then 
    begin 
    MessageDlg('DATA BELUM LENGKAP !',mtError, mbOKCancel, 0); 
    end 
     else 
     begin 
     Screen.Cursor:=crHourGlass; 
      con.BeginTrans; 
      with query do 
      begin 
       sql.Clear; 
       SQL.Text:='INSERT INTO daftar (tanggal,NO_MEDREC, NAMA, lAMA, STATUS, KETERANGAN, POLI) VALUES ("'+formatdatetime('yyyy-mm-dd',today())+'","'+concat(Edit2.Text,'-',edit3.text)+'","'+Edit1.Text+'","'+combobox1.text+'","'+combobox3.text+'","'+combobox2.text+'","'+combobox4.text+'")'; 
       execsql;//untuk mengeksekusi perintah SQL 
       Showmessage('Data berhasil disimpan'); 
       show; 
      end; 
     con.CommitTrans; 
     Screen.Cursor:=crDefault; 
     button1.Enabled:=false; 
     button2.Enabled:=false; 
      query1.close; 
     end; 
end; 
procedure TForm1.ComboBox3Click(Sender: TObject); 
begin 
IF combobox3.text='UMUM' THEN 
    begin 
    EDIT5.Color:=clBlack; 
    EDIT5.CLEAR; 
    EDIT5.ReadOnly := true 
    END 
    ELSE 
    BEGIN 
    EDIT5.Color:=clWHITE ; 
    EDIT5.ReadOnly := FALSE 
    END 

END; 
procedure TForm1.Button3Click(Sender: TObject); 
begin 
con.connected:=true; 
with query do 
      begin 
       sql.Clear; 
       SQL.Text:='Select * from daftar where tanggal = curdate()'; 
       execsql;//untuk mengeksekusi perintah SQL 

       show; 
       end; 

button1.Enabled:=TRUE; 
button2.Enabled:=TRUE; 
edit1.Clear; 
edit2.Clear; 
edit3.Clear; 
edit5.Clear; 
combobox1.ClearSelection; 
combobox2.ClearSelection; 
Combobox3.ClearSelection; 
combobox4.ClearSelection; 
edit2.SetFocus; 
end; 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
con.connected:=true; 
with query do 
      begin 
       sql.Clear; 
       SQL.Text:='Select * from daftar where tanggal = curdate()'; 
       execsql;//untuk mengeksekusi perintah SQL 

       show; 
       end; 
Show; 
end; 

procedure TForm1.P2Click(Sender: TObject); 
begin 
FORM2.SHOWMODAL 
end; 

procedure TForm1.P1Click(Sender: TObject); 
begin 
form3.showmodal; 
end; 





procedure TForm1.CETAKClick(Sender: TObject); 
begin 
    form4.show; 
end; 

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; 
DataCol: Integer; Column: TColumn; State: TGridDrawState); 
begin 
if DBGrid1.DataSource.DataSet.RecNo mod 2 =0 then 
DBGrid1.Canvas.Brush.Color := clskyBlue; //pilih warnanya 
DBGrid1.DefaultDrawColumnCell(rect, datacol, column, state); 



if DataSource1.DataSet.RecNo > 0 then 
begin 
if Column.Title.Caption = 'No.' then 
DBGrid1.Canvas.TextOut(Rect.Left + 2, Rect.Top, IntToStr(DataSource1.DataSet.RecNo)); 
end; 
end; 

procedure TForm1.CARIHISTORYPASIEN1Click(Sender: TObject); 
begin 
form5.show; 
end; 

End. 

iプロパティをプロパティに直接設定します。コードを使用しない,,,, 接続のためのプロバイダ。プロバイダー= MSDASQL.1 とadoconnection.connected

に= trueを確認MySQLサーバのための最も一般的な理由が解消された。..

+0

の下に記載されています。この時点でサーバから 'select 1'を送信します。 – Drew

+1

Adoを使用してMySqlサーバーに接続できるように、どのドライバを使用していますか? Odbc? – MartynA

+0

私のオフィスの一般的なPCはデュアルコア32ビットであるため、ODBC 3.51を使用しています.1GBのRAMをXPまたは7で使用しています。 –

答えて

0

をありがとうございましたエラーは、サーバーがタイムアウトと閉じていること です接続。この場合、通常 には次のいずれかのエラーコードが表示されます(お使いのオペレーティングシステムによっては になります)。

私は( MYSQL構造の再接続フラグがに等しいあなたは、サーバー側でタイムアウトが発生していると、クライアントで自動 再接続が無効になっているため、この

にこのエラーを受け取りました0)。このエラーの

しかし、完全な理由は、すべての 'N'秒を発射タイマーを作成リンク

http://dev.mysql.com/doc/refman/5.7/en/gone-away.html

関連する問題