2016-10-05 15 views
0

私は、データベースへの接続を確立せずに、どのコンピュータにもコピーしなければならないような方法でデータベースを埋め込む必要があるプロジェクトに忙しかったです。私はこれを試みました:Delphiで実行時にデータベースに接続する

path:=extractFilePath('MEDA_p.exe'); 
dmMEDA.conMeda.ConnectionString:='Provider=Microsoft.ACE.OLEDB.12.0; Data Source= '+path+'dbMEDA.accdb; Persist Security info=false'; 
dmMEDA.conMeda.Connected:=true; 

しかし、「スタックオーバーフロー」エラーが発生し続ける。または、これを行う場合:

dmMeda.conMEDA.open; 
path:=extractFilePath('MEDA_p.exe'); 
dmMEDA.conMeda.ConnectionString:='Provider=Microsoft.ACE.OLEDB.12.0; Data Source= '+path+'dbMEDA.accdb; Persist Security info=false'; 
dmMEDA.conMeda.Connected:=true; 
dmMEDA.conMeda.close; 

「オブジェクトが開いているときに操作できません」というメッセージが表示されます。

助けが必要ですか?

アップデート:私は二重引用符を追加し、接続を使用して、その後trueの場合はfalseを設定するなどの提案のいくつかを試してみましたが、私は試してみて、作るとき(アクティブ)真の表は、私は別の「スタックを取得

オーバーフローエラー '

dmMEDA.tbllogs.Active:=true; 

どうすればよいですか?

+3

IDEで接続を開いたことはありますか?その場合は、プログラムを実行する前に、IDEでactive = falseに設定します。 – kobik

+2

私はそのパス変数が何であるかわかりませんが、書き込み可能なデータへのパスとして使用しようとしているのであれば、それは起こるのを待っている事故です。アプリがあるフォルダに書き込むことはできません。 – MartynA

答えて

2

2番目のブロックでは、一連のイベントが間違っています。接続を閉じて変更を加え、接続を再度開く必要があります。

dmMeda.conMEDA.Connected := False; 
path:=extractFilePath(Application.ExeName); 
dmMEDA.conMeda.ConnectionString:='Provider=Microsoft.ACE.OLEDB.12.0; Data Source= '+path+'dbMEDA.accdb; Persist Security info=false'; 
dmMEDA.conMeda.Connected:=true; 

アプリケーションへのパスにスペースが含まれる場合は、二重引用符で囲む必要があります。

dmMeda.conMEDA.Connected := False; 
path := extractFilePath(Application.ExeName); 
dmMEDA.conMeda.ConnectionString := 'Provider=Microsoft.ACE.OLEDB.12.0; Data Source= "' + path + 'dbMEDA.accdb"; Persist Security info=false'; 
dmMEDA.conMeda.Connected := True; 
+0

パスには二重引用符が必要ですが、過去にこのような問題がありました。 –

関連する問題