2016-09-07 7 views
0

원격 데이터베이스를 사용하는 데스크톱 애플리케이션이 있습니다. 불행히도 메모리 제한을 변경할 수 없습니다. 로컬 데이터베이스 또는 LAN 데이터베이스를 사용할 때 애플리케이션이 좋아졌습니다. 하지만 원격 데이터베이스를 사용할 때 종종 "mysql 서버가 사라졌다"는 오류가 발생했습니다. 내 가정은 내가 잘 연결을 사용하지 않는 것입니다. 나는 ado.committrans와 ado.begintrans를 수행하지만 didnt는 ado.close 또는 ado.free를 수행합니다. 나는이의 예 ... 내가 그들을 배치해야합니까 내가 사용 법석 어디에 어떤 기능을해야하는 각 DBGrid를 위해 보여주는를 포함한 거래 나 뭔가를 .... 내 호스팅 설정은 다음과 같습니다?mysql 서버가 피하는 데 adoconection을 사용하는 예제가 필요합니다.

> 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** 

내 프로젝트에 연결되어 있지 않은지 궁금합니다.

여기 내 코드 :

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에 = 사실 확인

MySQL 서버에 대한 가장 일반적인 이유는 오류가 서버가 시간 초과 및 폐쇄 것을 입니다 사라 졌는지
+0

아래에 설명되어 있습니다. 어느 지점에서 서버로부터'select 1'을 보냅니다. – Drew

+1

Ado를 사용하여 MySql 서버에 연결할 수 있도록 어떤 드라이버를 사용하고 있습니까? Odbc? – MartynA

+0

내 사무실에서 일반적인 PC가 듀얼 코어 32 비트이기 때문에 ODBC 3.51을 사용하고 있습니다. XP 또는 7을 사용하는 1GB RAM이 있습니다. –

답변

0

연결. 이 경우 에 일반적으로 다음 오류 코드 중 하나가 표시됩니다.이 오류 코드는 운영 체제에 따라 다릅니다.

내가합니다 ( MYSQL 구조의 재 연결 플래그는 동일 사용할 수 있습니다 때문에 당신은 서버 측 시간 제한 및 클라이언트의 자동 재 연결을 발견 한이

이 오류가 발생 0). 이 오류에 대한

그러나 완전한 이유는 모든`n` 초를 발생시키는 타이머를 생성 링크

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