掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
SQL後データグリッドを編集するには? (ID:108101)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
おはようございます。たびたび申し訳ありませんが。 再確認し、再度いろいろ試したところ やはりデータグリッドにはデータが反映されず、編集もできません。 そこで、一番初めにのせた例ではなく、実際のコードをのせますので。(実際の方が結構複雑なので・・・汗) よろしくお願いします。 テーブルは、 テーブルA[M1_SYOHIN_TBL] M1_SYOHIN_CD...商品コード M1_SYOHIN_NM...商品名 M1_SYOHIN_TN...商品単価 テーブルB[M2_TENKAI_TBL] M2_SYOHIN_CD...商品コード M2_SIZAI_CD...商品コード(資材用) M2_HITUYOU_SU...必要な数 があり、一つの商品を作るのに必要な商品をテーブルBに保存してあります。 フォームA テキスト1[Shohin_No](商品コード) テキスト2[Syohin_Nm](商品名) テキスト3[Syohin_Tn](商品単価) データグリッド1[Tenkai] (商品コード(visible = false)) (商品コード(資材用)・商品名(資材用)) (商品単価(資材用)・必要数) があり、フォームのテキスト1に商品コードを打ち込むと。 テキスト2とテキスト3にテーブルAからの値が入り データグリッドにも商品コードと必要数はテーブルBから、 商品名と商品単価は商品コード(資材用)を元にテーブルAから値取得します。 コードは下記のとおりです。 Option Explicit '追加 Dim CN As New ADODB.Connection 'オープン Private Sub Form_Load() Dim DB As String 'データベース名 DB = GetDataSorce() CN.ConnectionString = "Provider=SQLOLEDB.1;" & "Data Source" & DB CN.Open Set Me.Tenkai.DataSource = Nothing End Sub 'データソース名の取得 Private Function GetDataSorce() As String Dim startPos As Long '開始位置 Dim endPos As Long '終了位置 Dim skip As Long '読み飛ばす文字数 'データソースの取得 startPos = InStr(1, DE1.Con1.ConnectionString, "Data Source=", vbTextCompare) endPos = InStr(startPos, DE1.Con1.ConnectionString, ";", vbTextCompare) skip = Len("Data Source=") GetDataSorce = Mid(DE1.Con1.ConnectionString, startPos + skip, endPos - (startPos + skip)) End Function 'テキスト1のロストフォーカス処理 Private Sub Syohin_No_LostFocus() Call RefreshData End Sub 'SQL処理 Private Sub RefreshData() Dim RS As New ADODB.Recordset Dim RS2 As New ADODB.Recordset Dim strSQL As String 'SQLステートメント strSQL = "SELECT M1_SYOHIN_CD,M1_SYOHIN_NM,M1_TANI1_CD FROM M1_SYOHIN_TBL WHERE M1_SYOHIN_CD = '" & Me.Syohin_No & "'" 'レコードセット取得 RS.Open strSQL, CN, , adLockOptimistic Set Me.Syohin_Nm.DataSource = RS Set Me.Syohin_Tn.DataSource = RS Me.Syohin_Nm.DataField = "M1_SYOHIN_NM" Me.Syohin_Tn.DataField = "M1_TANI1_CD" strSQL = "select M2_SYOHIN_CD,M2_SIZAI_CD,M2_HITUYO_SU,M1_SYOHIN_NM,M1_TANI1_CD FROM M2_TENKAI_TBL INNER JOIN M1_SYOHIN_TBL ON M2_SIZAI_CD = M1_SYOHIN_CD WHERE M2_SYOHIN_CD ='" & Me.Syohin_No & "'" RS2.Open strSQL, CN, adOpenStatic, adLockOptimistic Set Me.Tenkai.DataSource = RS2 Me.Tenkai.Columns("商品名").DataField = "M1_SYOHIN_NM" End Sub 'レコードの追加時 Private Sub Tenkai_OnAddNew() Me.Tenkai.Columns("製品コード").Value = Me.Syohin_No End Sub >Me.Syohin_Nm.Text = RS.Collect("M1_SYOHIN_NM") & "" >のように、Textプロパティに、値を直接送り込むのが一般的かと思います。 商品コードを打ったときに、データがない場合はエラーが出るので やはりこの形をとらせていただきました。 >データグリッドに割り当てるまでは良いですが、そのあと、 >せっかくのRecordsetを閉じてしまっているからだと思います。 レコードセットを閉じなくてもいいように2つ作りました。 >「RS.LockType が adLockReadOnly になっていないか」 >「RS.Supports(adUpdate) が True を返すか」 これも大丈夫だと思います。 よろしくお願いします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.