[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2004/11/30(Tue) 23:49
投稿者名:junchan
Eメール:bkalw803@rinku.zaq.ne.jp
URL :
タイトル:
ACCESSとVB間でのデータのやり取りについて
前略
元々ACCESSで作成された「スタンプ会.mdb」にTABLE「会員名簿」があります。この「スタンプ会.mdb
」にVBからから接続し「会員名簿」から呼び出したり、書き込んだりしております。
VBからは、ACCESSで作成されたデータもVBで書き込んだデータも問題なく呼び出されるのですが、
ACCESSからはVBで書き込んだデータが呼び出すことができません。ACCESSから検索すると、該当
するデータが見当たらないというメッセージがで、新規のデータとして書き込もうとすると、重
複エラーが発生します。どこに問題があるのか悩んでおります。アドバイスお願いいたします。
                                         開発環境 [WINDOWS-XP VB6.0 SP6 ACCESS-2002]

投稿時間:2004/12/01(Wed) 11:51
投稿者名:カムリン
Eメール:kakurin@hotmail.com
URL :
タイトル:
Re: ACCESSとVB間でのデータのやり取りについて
> VBからは、ACCESSで作成されたデータもVBで書き込んだデータも問題なく呼び出されるのですが、
> ACCESSからはVBで書き込んだデータが呼び出すことができません。
いまいち状況が掴めない(読解力不足か)んですが、
VBからはどういう方法で、読み書きしてますか?
例えば、
ADOかDAOかとか
SQL文かUpDataかとか

ACCESSから呼び出せないとは、どういう呼び出し方をしたときですか?

テーブルをダブルクリックする等で開いたときには見えてますか?

投稿時間:2004/12/01(Wed) 15:08
投稿者名:junchan
Eメール:bkalw803@rinku.zaq.ne.jp
URL :
タイトル:
Re^2: ACCESSとVB間でのデータのやり取りについて
> > VBからは、ACCESSで作成されたデータもVBで書き込んだデータも問題なく呼び出されるのですが、
> > ACCESSからはVBで書き込んだデータが呼び出すことができません。
> いまいち状況が掴めない(読解力不足か)んですが、
> VBからはどういう方法で、読み書きしてますか?
> 例えば、
> ADOかDAOかとか
> SQL文かUpDataかとか

書き込みのプロシージャー
Private] Sub Command1_Click()
  Dim cn As New ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim strSQL As String
    Set cn = New ADODB.Connection
        cn.ConnectionString = _
            "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=\\DELL\My Documents\NEWスタンプ会.mdb"
        cn.Open
        Set rst = New ADODB.Recordset
        rst.Source = "会員マスタ"
        rst.ActiveConnection = cn
        rst.CursorType = adOpenStatic
        rst.LockType = adLockOptimistic
        rst.Open
        
        With rst
            .MoveLast
            .AddNew
            ![連番] = ![連番] + 1
            ![会員NO.] = Text1.Text
            ![郵便番号] = Text4.Text
            vntResult = Split(Text5.Text, " ")
            ![住所1] = vntResult(0)
            ![住所2] = vntResult(1)
            ![電話番号] = Text6.Text
            ![氏名] = Text2.Text
            ![ふりがな] = Text3.Text
            ![性別NO.] = Text8.Text
            ![生年月日] = Text7.Text
            ![加盟店NO.] = Combo1.Text
            ![登録NO.] = Text9.Text
            ![DM] = 0
            ![チラシ] = 0
            ![会員証] = 0
            ![ラッキー] = 0
            .Update
        End With
        rst.Close
        cn.Close
        Set rst = Nothing
        Set cn = Nothing
End sub

呼び出しのプロシージャー
Private Sub Text1_LostFocus()
  Dim cn As New ADODB.Connection
    Dim rst1 As ADODB.Recordset
    Dim searchNum As String
    Dim searchAdd As String
    Dim DBFile As String
    Dim ubCode As Long
    Dim vntResult As Variant
    
    searchNum = Text1.Text
    Set cn = New ADODB.Connection
    cn.ConnectionString = _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=\\DELL\My Documents\NEWスタンプ会.mdb"
    cn.Open
    Set rst1 = New ADODB.Recordset
    rst1.Source = "会員マスタ"
    rst1.ActiveConnection = cn
    'rsr1.CursorType = adOpenStatic
    rst1.Open
    On Error Resume Next
    rst1.MoveFirst
        Do While Not rst1.EOF
            If searchNum = rst1![会員NO.] Then
                Text2.Text = rst1![氏名]
                Text3.Text = rst1![ふりがな]
                Text5.Text = rst1![住所1] & " " & StrConv(rst1![住所2], vbWide)
                Text6.Text = rst1![電話番号]
                Text7.Text = rst1![生年月日]
                Text8.Text = rst1![性別NO.]
                Text9.Text = rst1![登録NO.]
                entryFlag = True
                Exit Do
            Else
                entryFlag = False
            End If
            rst1.MoveNext
        Loop
    住所 = Text5.Text
    vntResult = Split(住所, " ")
    searchAdd = vntResult(0)
    Open CurDir & "\ZipCode.csv" For Input As #1
        Do Until EOF(1)
            Input #1, ubCode, Jusho
            If InStr(Jusho, searchAdd) > 0 Then
                Text4.Text = ubCode
                Exit Do
            End If
        Loop
    Close #1
    If Text2.Text = "" Then
    Else
        Text10.SetFocus
    End If
    On Error GoTo 0
    rst1.Close
    cn.Close
    Set rst1 = Nothing
    Set cn = Nothing
End Sub

> ACCESSから呼び出せないとは、どういう呼び出し方をしたときですか?
ACCESSの入力FORMの「会員NO.」を入力した場合、登録RECORDが呼び出されるようになっていますが
VBから入力されたRECORDに限り表示されず、他のFIELDの値を入力し、登録ボタンをCLICKすると、
インデックス、主キーまたはリレーションシップで値が重複していると警告されます。
重複しているということは、「会員マスタ」TABLEの該当RECORDを認識しているとおもわれますが、
「会員NO.」のデータの型に問題があるのでしょうか?
ちなみにACCESSの「会員NO.」のデータの型はSTRINGでFIELD SIZE = 13 です。

> テーブルをダブルクリックする等で開いたときには見えてますか?
ACCESSでTABLEを開くとVBで書かれたRECORDは見えています。

以上のとおりです。お手数ですが、よろしくお願いいたします。
カムリン様
                                 Junchan

投稿時間:2004/12/01(Wed) 16:41
投稿者名:カムリン
Eメール:kakurin@hotmail.com
URL :
タイトル:
私には、分かりませんでした
すみません
わざわざ、コード書いてもらったんですが、
私では、分からないようです。
直接関係無いですが、
Find か、
SQL文で、
レコード特定したほうが、
Loopするより、
処理時間短くすみますよ。

投稿時間:2004/12/01(Wed) 17:10
投稿者名:いな
Eメール:
URL :http://homepage2.nifty.com/inform/vbdb/
タイトル:
Re^3: ACCESSとVB間でのデータのやり取りについて
hhttp://homepage2.nifty.com/inform/vbdb/

参考にされてはいかがでしょうか?

投稿時間:2004/12/01(Wed) 19:03
投稿者名:だい
Eメール:dee_bassist@hotmail.com
URL :
タイトル:
Re^3: ACCESSとVB間でのデータのやり取りについて
Accessのフォームで、他テーブルとの整合性をチェックしている可能性は考えられますか?
そのフォームが「会員マスタ」テーブル以外にも、関連するテーブルからもデータを取得している
のであれば、他のテーブルに情報が欠けていると、
クエリーの結合条件の問題で当該レコードが表示されないかもしれません。
フォームのレコードソースがどうなっているかは確認済みでしょうか?

> > テーブルをダブルクリックする等で開いたときには見えてますか?
> ACCESSでTABLEを開くとVBで書かれたRECORDは見えています。

ということであれば、「会員マスタ」テーブル自体にはレコードが登録されているものと思われます。

文面から推察する限りでは、
Access側のフォームの仕様という可能性も考えられますので、
そちらのほうも同時に調査されるとよいかもしれません。

投稿時間:2004/12/05(Sun) 18:55
投稿者名:junchan
Eメール:bkalw803@rinku.zaq.ne.jp
URL :
タイトル:
Re^4: ACCESSとVB間でのデータのやり取りについて
カムリン様、いな様、だい様
アドバイスありがとうございます。

カムリン様のご指摘どうりパフォーマンスの向上のためVBを書き換えました。

いな様のご指摘のサイトは、参考にさせていただきましたが、有益なヒントを
見つけることができませんでした。これがヒントになると思われるところがあ
りましたら、アドバイスいただけませんでしょうか?

だい様のご指摘のリレーションシップの整合性およびACCESSの仕様に関するご
指摘どおり問題がありそうです。ただ、「スタンプ会.mdb」にセキュリティー
が設定されているようで、調査が進んでおりません。作成者に問い合わせし、
解決に努力したいとおもいます。解決した時点でご報告いたいします。
ありがとうございました。

投稿時間:2004/12/06(Mon) 22:02
投稿者名:junchan
Eメール:bkalw803@rinku.zaq.ne.jp
URL :
タイトル:
Re^5: ACCESSとVB間でのデータのやり取りについて
原因が判明いたしました。だい様のご指摘の整合性に問題がありました。
おかげさまで解決いたしました。皆様、ありがとうございました。