• ベストアンサー

テーブルの削除

VB6.0 ACCESS2000で開発しています。 ACCESSのt_名前というテーブルを DataGridへ表示しています。 グリッド上で選択した1件のレコードを削除したいのですが どうすればいいのでしょうか。 お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#140971
noname#140971
回答No.2

Private Sub Command1_Click()   Dim isOK  As Boolean   Dim strSQL As String      Me.MSFlexGrid1.Col = 1                      ' 列[ID] を指示   strSQL = "DELETE FROM 仕入記録 WHERE ID=" & Me.MSFlexGrid1.Text ' SQL文作成   isOK = CnnExecute(strSQL)                    ' SQL文実行   If isOK Then     Me.MSFlexGrid1.RemoveItem Me.MSFlexGrid1.Row     MsgBox "1件のレコードを削除しました。"   End If End Sub Microsoft は MSFlexGrid を推奨しているので、それを利用したサンプルを示します。 上記のコードでは首尾よく削除されたら表示行も削除しています。 なお、ここで使っている CnnExecute関数は、回答のために作成したもので十分にテストされたものではありません。 Option Explicit Const conCNNSTRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\temp\db1.mdb" 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 = New ADODB.Connection    With cnn      .Errors.Clear      .ConnectionString = conCNNSTRING      .Open      .BeginTrans      .Execute strSQL      .CommitTrans    End With Exit_CnnExecute: On Error Resume Next    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 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

aki08102001
質問者

お礼

ありがとうございます。 うまく出来ました。

その他の回答 (1)

  • ape5
  • ベストアンサー率57% (85/148)
回答No.1

VB6.0ですと、昔の記憶ですが、DataGridに表示するときにそれぞれの行のPKを保持してると思うのですが、それを使って、SQL文を発行してやったとおもいます。 基本はそれだと思います。

関連するQ&A

  • vbからmdbのレコード削除

    今、mdbデータをdataGridに表示させるVBがあります。 そこでdatagridからレコードを選択し、そのレコードをmdbから削除したいのですが、可能でしょうか? できる場合どのようにしたら良いのでしょうか? よろしくお願いします。

  • グリッドにデータベースの更新を反映させるには?

    VB6.0SP5で開発しています。 単純なデータベースの更新プログラムなんですが、 更新した後にRefreshやRebindしても更新内容が反映されません。 ADODCをつかってグリッドに内容を表示しているのですが、 グリッドをクリックして選択した行のレコードを削除します。 そのあとに、ADODCをRefreshしてもグリッドをRefreshしても反映されないんです。 データは削除されています。 DataGrid,TDBGridの二つのグリッドで試したんですが、 どっちもだめでした。 みななんどうやって反映させているのでしょうか? どうぞ、よろしくお願いしますm(_ _)m

  • 「削除するレコードを含んだテーブルを指定してくださ

    アクセスです。 DELETE T元テーブル.文字, T削除対象テーブル.文字 FROM T削除対象テーブル RIGHT JOIN T元テーブル ON T削除対象テーブル.文字 = T元テーブル.文字; このSQL文はどこがおかしいですか? T元テーブルとT削除対象テーブルで同じ文字があるのなら、T削除対象テーブルの文字のレコードを削除したいのですが、 この削除クエリを実行しようとすると 「削除するレコードを含んだテーブルを指定してください。」 とメッセージが出ます。 テーブルの指定はどこからどのように行えばいいのでしょうか? T削除対象テーブルを指定したいです。

  • データグリッドでBeforeDeleteイベントが発生しない

    現在データグリッドを使っていて、 ○レコード削除時の確認と ○リレーションテーブルレコードの削除をしようと思っています。 しかしグリッドで行選択し、Deleteボタンでレコードを削除しようとしても、BeforeDeleteイベントがスルーされます。何故なのでしょうか? 他に上記2つの目的を果たす事が出来る方法があればそれでもいいのですが・・。 よろしくお願いします。 環境等: Windows2000Pro VB6.0 DataGrid Control6.0 ADODB Connection Provider=Jet.OLEDB.3.51

  • VB5.0でACCESS2002のテーブルをDBGridに表示

    VB5.0で開発したプログラム内でACCESS97のテーブルをDBグリッドに表示させていました。 ACCESSを2002にバージョンアップさせる必要があり、移行処理をしていましたが、そのままでは「データベースを認識できません」というエラーになってしまいます。DAOデータコントロールのDatabaseNameプロパティが設定できないようです。レコードセットでは読み込めているようなので、レコードセットをデータコントロールに割り当てたら表示されました。 そのときデータコントロールのrefreshはエラーになるためフォーム全体をrefreshしました。 ところがそれをコンパイルしてACESS2002のランタイムのみがインストールされているマシンにインストールするとDBグリッドが表示されません。 どうしたらよいでしょうか?こんな小手先の変更では無理でしょうか?宜しくお願いします。

  • OracleDBのテーブルのリンクについて

    Oracleテーブルのリンクについて教えてください。 OracleDBのテーブルをACCESS97からリンクして見ているのですが、 OracleテーブルのレコードをACCESSから削除や挿入しようとすると 出来るテーブルと出来ないテーブルがあります。 ACCESSからレコードを選択し、右クリックを押すと通常、そのメニューの 中に「新しいレコード」、「レコードの削除」などが出ますが、 レコードが削除できないテーブルはその項目が灰色になり選択できません。 更新出来ないテーブルと出来るテーブルの違いは何が考えられますか? 申し訳ないですが、宜しくお願い致します。

  • テーブル内のレコードを別のテーブルに移す良い方法を教えてください

    SQLサーバー7.0(ADO)とAccess97のVBAでアプリケーションの開発を行っております。SQLサーバー7.0(サーバー側)にあるテーブルの中身(レコード全件)をAccess97(ローカル)にあるテーブル(テーブル名とその中のフィールド名は全く同じだが中身はからっぽ)にまとめて移しかえる良い方法があれば教えてください。いま私はフォームオープンイベントでフィールドとレコードをループでまわして移しかえているのですが、テーブル数も多いため記述も長くなりますし、何よりもパフォーマンスが良くありません。テーブル単位で中身を別のテーブルに移す方法などがあれば是非教えてください。 (例) SQLサーバー(ホスト側)---テーブル名「T_社員マスター」フィールド数100項目、レコード数500件 ↓ ↓ フォームオープン時にそのまま移しかえたい ↓ ↓ Access97(端末側)-------テーブル名「T_社員マスター」フィールド数100項目、レコード数0件 よろしくお願いします。

  • DataGridの内容をExcelにエクスポートするには?(VB)

    VBでDataGridを使ってOracleDBのテーブルを表示する機能を開発中です。 Oracleのテーブルの内容をADOを使って VBのDataGridに表示することはできました。 そのDataGridに表示された内容をExcelのファイルにエクスポートするにはどうすれば良いのでしょうか? ご存知でしたらお教えください。 環境はWindows2000、VB6.0です。 宜しくお願いいたします。  

  • ADODCとデータグリッドを連動させるには?

    WINDOWS2000,VB6,SP5で開発しています。 グリッドのデータソースにADODCコントロールを指定して、 これらを連動させたいのですが、どうもできません。 やりたいのは、レコードの削除です。 ADODC1.RecordSet.Delete で、カレントレコードを削除させてるのですが、 グリッドで削除したい行を選択しただけでは、 ADODCのカレントレコードは動いてないようなのです。 なので、ADODCの一番初めの行が削除されてしまい、困ってます。 こんな初心者なわたくしですが、どうぞよろしくお願いしますm(_ _)m

  • レコードの削除ができない

    アクセス2007です。 デザインで一つのフォームを作り そこにテーブル1をドラッグしてサブフォームにしました。 そしてサブフォームのテーブル1はデータシートビューで表示しています。 例えば、画像のように4レコード目を削除しようと思いカーソルを持っていき 右クリックすると 「レコードの削除(R)」が選択できない状態です。 2007では、サブフォームでレコードの削除はできないのでしょうか? アドバイスよろしくお願いします。

専門家に質問してみよう