VB6.0からサーバのOracle8.1.7に接続し、表示させるプログラムを作って
います。 VBのDataGridとAdodcを使いテーブル内容を表示させることは
できたのですが、行の削除を行うとエラーになってしまいます。この対処
方法または意味が分かれば教えて下さい。
エラーになる箇所とエラーのメッセージは以下のようになっています。

SqlStr = "DELETE from emp where empno = 1"
Adodc1.RecordSource = SqlStr
Adodc1.Refresh
   ↑
  ここで、「オブジェクトが閉じてる場合は操作は許可されません」
  というエラーがでます。
  (DELETE文をSELECT文にするとエラーはでません)
  

このQ&Aに関連する最新のQ&A

A 回答 (1件)

RecordSourceにSelect以外(DeleteとかUpdateとか)ってセットできましたっけ?


データベース.ExecuteSQL(" SQL文 ")
で消したいデータを削除してから、RefreshするだけでOKだと思います。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBのDataGridで見られるエラーについての質問

こんにちはtmgmです。

VisualBasic6.0のデータベース連携プログラムで困っています。

ACCESSであらかじめ.mdbを作成しておいて、そのDBに接続し、DataGridにmdbのデータを表示するという単純なプログラムなんですが、どうしても決まったエラーが出てしまいます。
下記プログラムの、Set D_GRID.DataSource = RECOでいつもエラーになります。
エラー内容は「行セットにはブックマークを指定できません」です。
つまりはこのエラーの意味がわからないので困っています。

分かる方、ご返答よろしくお願いします。

<補足>
プログラムはこんな感じです。

----------------------------------------------------------------------------
Private Sub Form_Load()

'接続の定義
Dim CONN As adodb.Connection

'レコードセットの宣言
Dim RS As adodb.Recordset


Set CONN = New adodb.Connection

With CONN
.ConnectionString = "provider=Microsoft.jet.oledb.4.0;" _
& "data source=C:\TESTMDB.mdb"
.Open
End With


MsgBox "データベース接続に成功しました。", vbOKOnly + vbInformation, "VBプログラミング"


Set RECO = New Recordset

With RECO
.ActiveConnection = CONN
.Source = "T_TEST"
.CursorType = adOpenDynamic
.LockType = adLockOptimistic
.Properties("IRowsetIdentity") = True
.Open
End With


Set D_GRID.DataSource = RECO

  Msgbox "データの取得に成功しました。", vbOkOnly + vbInformation, "VBプログラミング"


End Sub

こんにちはtmgmです。

VisualBasic6.0のデータベース連携プログラムで困っています。

ACCESSであらかじめ.mdbを作成しておいて、そのDBに接続し、DataGridにmdbのデータを表示するという単純なプログラムなんですが、どうしても決まったエラーが出てしまいます。
下記プログラムの、Set D_GRID.DataSource = RECOでいつもエラーになります。
エラー内容は「行セットにはブックマークを指定できません」です。
つまりはこのエラーの意味がわからないので困っています。

分かる方、ご返答よろしくお願い...続きを読む

Aベストアンサー

確か、DataSource って、RecordSet オブジェクトではなく、DataControl とペアで使用して DataControl をセットするんだったような気がします。
VB のコードウィンドウで DataSource 上にカーソルを置いて F1 でヘルプを見てみてください。たぶん何らかの説明が出てくると思うのですが。

QWebbrowser1,refreshとrefresh2の違い

refreshとrefresh2の違いが分かりません。
MSDNライブラリーですと
refresh2の解説は
Internet Explorerが現在表示しているファイルを再度読み込みます。Refresh と異なり、Refresh2 には、更新レベル設定用の引数があります。

この「レベル」とは具体的には何なのでしょうか???

Aベストアンサー

お世話になります。

こちらが参考になると思います。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=23943&forum=7&8

QVBでADODCを使ってパスワード付ACCESSに接続する方法

VB6.0SP5でプログラム作っています。
ADODCを使ってパスワード付のアクセスデータベースに接続したいのですが、
全然出来ません(--;)
ADODCのプロパティの接続タブで、
パスワードのところに、設定したパスワードを入力しても
ダメでした。
ユーザー名は、あるのかすらわからないので空欄です。
ためしにアクセスのパスワード設定を解除してみると、接続できました。
エラーは

プロバイダの初期化中にエラーが発生したため、接続のテストに失敗しました。
アプリケーションを起動できません。システムデータベースが存在しないか、
またはほかのユーザーが排他的にシステムデータベースを開いています。

です。
排他的に開いていたりしないし、パスワード設定を解除すれば接続できるので、???です。
どうしてもADODCを使って接続したいのです。
接続する方法はないのでしょうか?

Aベストアンサー

接続文字列として以下を指定して下さい。
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Accessファイルの絶対パス;Persist Security Info=False;Jet OLEDB:Database Password=パスワード

QSQLでSELECTの中でSELECT文を作りたいのですが。

開発環境 VB6 WINXP 
SQLで、次のそれぞれの文((1)、(2))は問題なく動作しますが、これを合体させて、絞り込むにはどうしたら良いのでしょうか。
(1) strSQLM = "SELECT * FROM 漁獲DATA WHERE 日付 =#" & Format(PickedDate, "m-d-yy") & "#"
(2) strSQLM = "SELECT * FROM 漁獲DATA WHERE 順位 =" & Meigara

つまり同一の日の同じ順位のデータを調べたいのですが。よろしくお願いします。

Aベストアンサー

>上の文だと、抽出条件でデータ型が一致しません。となってしまいました。どうすれば良いのでしょうか。Meigaraは数値です。

Meigaraは数値でしたか。自分は「○位」という感じの文字列だと思っていました。その場合は「順位 =」のあとにある「'」と一番最後にある「Meigara」から後ろを消せば良いです。消した場合のSQL文は下記になります。

strSQLM = "SELECT * FROM 漁獲DATA WHERE 日付 ='" & Format(PickedDate, "m-d-yy") & "' AND 順位 =" & Meigara

これで大丈夫なはずですよ。

QADODCでデータベースに接続する際のエラーを拾うには?

WindowsXP,VB6,SP6,SQL2005にて開発しています。

ADODCを使って、データベースに接続しているのですが、
何らかのエラーが発生した場合、
こちらの指定したエラーメッセージを表示させたいのです。

なので、ADODC1_Errorにて試してみたのですが、
fCancelDisplay=0にしても、ErrorNumber=0にしても、
Scode=0にしても、Description=""にしても、
メッセージボックス(表示は何もない)が表示されてしまうんです。
それを出さないようにするには、どうしたらよいのでしょうか?
どうぞ、ご教授よろしくお願いしますm(_ _)m

Aベストアンサー

SQL Sever 2000+Access の場合ですが、基本は同じだと考えて・・・。

Public Sub ErrMessage(ByVal CnnErrors As ADODB.Error, ByVal strSQL As String)
   MsgBox "ADOエラーが発生しましたので処理をキャンセルします。" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & CnnErrors.Description & Chr$(13) & _
      "・Err.Number=" & CnnErrors.Number & Chr$(13) & _
      "・SQL State=" & CnnErrors.SQLState & Chr$(13) & _
      "・SQL Text=" & strSQL, _
      vbExclamation, " ADO関数エラーメッセージ"
End Sub

Public Function CnnExecute(ByVal strSQL As String) As Boolean
On Error GoTo Err_CnnExecute
   Dim isOK As Boolean
   Dim cnn As ADODB.Connection
  
   isOK = True
   Set cnn = CurrentProject.Connection
   With cnn
     .Errors.Clear
     .BeginTrans
     .Execute strSQL
     .CommitTrans
   End With
Exit_CnnExecute:
On Error Resume Next
   cnn.Close
   Set cnn = Nothing
   CnnExecute = isOK
   Exit Function
Err_CnnExecute:
   isOK = False
   If cnn.Errors.Count > 0 Then
     ErrMessage cnn.Errors(0), strSQL
     cnn.RollbackTrans
   Else
     MsgBox "プログラムエラーが発生しました。システム管理者に報告して下さい。(CnnExecute)", _
        vbExclamation, " 関数エラーメッセージ"
   End If
   Resume Exit_CnnExecute
End Function

*単なるデザイナですので外していたらスミマセン!

SQL Sever 2000+Access の場合ですが、基本は同じだと考えて・・・。

Public Sub ErrMessage(ByVal CnnErrors As ADODB.Error, ByVal strSQL As String)
   MsgBox "ADOエラーが発生しましたので処理をキャンセルします。" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & CnnErrors.Description & Chr$(13) & _
      "・Err.Number=" & CnnErrors.Number & Chr$(13) & _
      "・SQL State=" & CnnErrors.SQLState & Chr$(13) & _
      "・SQL Text=" & strSQL, _...続きを読む


人気Q&Aランキング

おすすめ情報