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と関連する良く見られている質問

Q運用中のALTER TABLE

運用中でアクセスがあるテーブルに
ALTER TABLEで項目を追加したいのですが
問題ありますでしょうか?
オラクル9iです。

宜しくお願い致します。

Aベストアンサー

(1)ALTER TABLE文は表ロックがかかります(自身なし(^^;)。
SELECT ~ FOR UPDATE NOWAITで実行するSQL文等があるとリソースビジー
(ORA-00054)が戻る場合があります。

(2)テーブルを変更することによっていろいろ(プロシージャなどが)
無効(INVALID)になる場合がありますので、オブジェクトの状態を確認
したほうが良いと思います。

(3) DEFAULT指定がALTER TABLE文にある場合、undo領域が圧迫
(領域不足)したり、ALTER TABLEがなかなか完了しなかったりします。
(私はコレでハマリました(^^;)

今のところ、思いつくのはコレだけですが、いずれにしろテストできる
環境で確認されたほうが良いと思います。

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 でヘルプを見てみてください。たぶん何らかの説明が出てくると思うのですが。

QOracleのCreate Table 文のStorage句

お世話になります。

OracleのCreate Table 文のStorage句のNextの値を
変更したいのですが、できるのでしょうか?

Alter Table文で変更するのでしょうか?
手元にマニュアルが無く困っております。

よろしくお願いします。

Aベストアンサー

alter table テーブル名 storage ( next 変更後のサイズ );

だっけかな?

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

Qmysqlのalter table中のロックについてです。

mysqlのalter table中のロックについてです。


下記のように、alterでテーブルを再構築中に同じテーブルにinsertが実行された場合、
接続Bのinsertはブロックされるかと思うのですが、テーブルが大きくalterに時間がかかる場合、
タイムアウトなどは発生するのでしょうか。
またもし発生する場合、タイムアウト値の設定などの確認方法はあるのでしょうか。

1.接続A
 alter table table1 add columnB int(11) ;

2.接続B(接続Aのalter実行中)
 insert into table1(columnA) values('aaa');

Aベストアンサー

ロック待ち関連のパラメータは、
innodb_lock_wait_timeout
table_lock_wait_timeout
だと思うんですが、DDLでロックされているテーブルのロック待ちに関しては、上記パラメータが関係ないようでした。
私の設定値は、デフォルトの50(両方とも)

※確認方法
show variables like '%timeout%';


2パターン、やってみました。

セッション1
alter table table1 add primary key(c1); /* 20分間 */

セッション2
start transaction;
insert into a values (100000001); /* セッション1終了後、ロック解除 */
rollback;

セッション1
alter table table1 drop primary key; /* 10分経過 */

セッション2
lock tables table1 write; /* おそらく、セッション1終了後ロック解除するのでしょう */

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=パスワード

Qalter table で text が midiumtext になってしまう

当初作ったテーブル(テーブル名=test)では
col1 char(10) unique not null,
col2 text not null,
col3 text not null,
col4 text not null
だったのですが、col1だけをchar→varcharに変えたくて
alter table test modify col1 varchar(10) unique not null
としたところ、他のtext型項目が全てmidiumtextになってしまいました。

ひとつずつtextに直そうと
alter table test modify col2 text not null
を実行し次に
alter table test modify col3 text not null
とするとcol3はtextになるがcol2がまたmidiumtextになってしまいます。

midiumtextほどの容量は必要ないのでcol2~col4をtextに戻したいのですが、
どのようにすればよいのでしょうか。
ご教示願います。

宜しくお願い致します。

当初作ったテーブル(テーブル名=test)では
col1 char(10) unique not null,
col2 text not null,
col3 text not null,
col4 text not null
だったのですが、col1だけをchar→varcharに変えたくて
alter table test modify col1 varchar(10) unique not null
としたところ、他のtext型項目が全てmidiumtextになってしまいました。

ひとつずつtextに直そうと
alter table test modify col2 text not null
を実行し次に
alter table test modify col3 text not null
とするとcol3はtextになるがcol2...続きを読む

Aベストアンサー

UNIQUEは引き継がれるはずなので、changeをつかって
以下のようにしてみてはいかがでしょうか?

ALTER TABLE `test`
CHANGE `col1` `col1` VARCHAR(10) NOT NULL
,CHANGE `col2` `col2` TEXT NOT NULL
,CHANGE `col3` `col3` TEXT NOT NULL
,CHANGE `col4` `col4` TEXT NOT NULL

ただしMySQLのバージョンにもよるでしょうけど、
暗黙のフィールド定義変更がはたらいて手動による
型変更は意味がないかもしれません

参考URL:http://www.mysql.gr.jp/Manual/mysql-4.00.12/manual.ja_Reference.html#Silent_column_changes

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

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

QALTER TABLE mytable CHANGE

mytableというテーブルのaカラムの型と名前を変更するのは
ALTER TABLE mytable CHANGE a new_a INT;
でできましたが、今度はnew_aをbにすると動時にTINYINT(4)にしたいのですが、SQLの文法が違うようだったので正しいものを教えてください。
ALTER TABLE mytable CHANGE new_a b TINYINT(4);
でなく、何なのですか?

Aベストアンサー

それで合っています。
(少なくともウチの4.0.23ではそれで変更できてます)

本当に文法ミスでのエラーでしょうか?
エラーの内容を確認してみてください。

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ランキング