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

投稿時間:2004/12/20(Mon) 11:31
投稿者名:でぶや
Eメール:
URL :
タイトル:
Update時にODBC接続エラー
いつも勉強させていただいております。

環境:WinXp
      VB6.0 Sp5
DB:AS400(IBM製 オフコン)

今、ExcelのデータをODBCで接続して、AS400に更新するプログラムを作成しています。
テストを行っているのですが、どうしてもエラーを解決することができません。
ご教授下さい。

'更新の関数(一部抜粋しています)
Public Function plngExpMastSet() As Long
Dim rstWork     As Recordset
Dim strSql      As String
Dim j           As Long

On Error Resume Next
    plngExpMastSet = False
      
    strSql = "Select * From " & gstrLibrary1 & ".SKWTRN"
    strSql = strSql & " WHERE KWSQNO = " & NmMst.Newest
    strSql = strSql & " AND KWYYMM = " & glngDate
    
    Set rstWork = gDbsWork.OpenRecordset(strSql, dbOpenDynaset, dbExecDirect, dbOptimistic)
    If err.Number <> 0 Then GoTo Err_ExpMastSet
    
On Error GoTo Err_ExpMastSet
    With rstWork
        For j = 0 To 2
            NmMst.Newest = NmMst.Newest + 1 ' SEQNO更新
            .AddNew
            ![KWSQNO] = CInt(NmMst.Newest)             ' SEQNo
            ![KWYYMM] = CLng(glngDate)                 ' 処理月度
            ![KWKGKB] = EXPENSKUBUN                 ' 小口経費区分
            ![KWTHDT] = pExpens.TransactDate        ' 取引年月日
            ![KWITCD] = CLng(pExpens.ChargeCD)         ' 入力担当者コード
            ![KWKMCD] = CLng(pExpens.SubjectCD)        ' 科目コード
            '---------------途中省略
            ![ZZFUNC] = ABILITY                      '作成機能/PGM
            ![ZZDATC] = Format(Now, "YYYYMMDD")      '作成日
            ![ZZTIMC] = Format(Time, "HHMMSS")       '作成時刻
            ![ZZUSRU] = gstrUserName                 '更新ユーザー
            ![FF] = ABILITY                          '更新機能/PGM
            ![ZZDATU] = Format(Now, "YYYYMMDD")      '更新日
            ![ZZTIMU] = Format(Time, "HHMMSS")       '更新時刻
            ![UPDATE_IDENT] = FIELDID                'フィールド更新/処理識別
            
      ’=======ここでエラーが発生====
            .Update  
            '==============================
      '以下省略

デバックをすると、UpDateのところでエラーがでます。

エラーメッセージが
err.description・・・ODBC接続エラーです。
dbEngine.Errors(0)・・・22005: [IBM][Client Access Express ODBC ドライバー (32 ビット)]      カラム 16: CWB0111 - システム呼び出しで渡されたバッファーが小さ過ぎて戻りデータを入れられません。

というように、エラーがでます。
エラーのメッセージを考えると、セットしている値が大きいのかなと思い、入力データのチェック
関数を作りました。そのチェックは通っているので、桁数・属性は問題ないかと思います。

ODBCへの接続は別関数で、SELECTでデータを取得できています。
Updateができない状態です。

申し訳有りませんが、ご教授ください。m(_ _)m

投稿時間:2004/12/29(Wed) 12:45
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: Update時にODBC接続エラー
回答ではありません。

何方からもレスが無いようなので、と言っても私には回答はできませんが
まず、 On Error Resume Next 等のエラー処理はまともに動作確認ができる
まで、コメントアウトにしておかないと本来のエラーが発生する箇所が掴めないでは。
(多分そうされているとは思うのですが、コードでは!!!)

又、WEBの検索で正確なエラーメッセージで検索すれば、何か思い当たる事が見つかる
と思うのですが?(通常はこれで殆ど解決できる)
上記でヒットしなければ、貴方だけの状況による場合のエラーの可能性が高いのでは?

因みに、dbEngine.Errors(0) err.description で検索しても参考になりそうな物が
ヒットしましが、それで解決できるかは私には解りませんが。

投稿時間:2004/12/29(Wed) 18:30
投稿者名:いな
Eメール:
URL :
タイトル:
Re: Update時にODBC接続エラー
AddNewを行っていますが、
既に登録済のデータがあると重複キーのエラーとなってしまうと思います。
ここは
If .RowCount <= 0 Then
    .AddNew
Else
    .Edit
End If

としてみては?

あと、どうでもいいことですが
>>申し訳有りませんが、ご教授ください。m(_ _)m

「ご教授」ではなく「ご教示」です。

投稿時間:2005/02/04(Fri) 09:40
投稿者名:セイセイ
Eメール:
URL :
タイトル:
Re: Update時にODBC接続エラー
AddNew後に初期値が正常に書き込まれているか確認すること。
AS400ではAddNewでフィールドに指定した初期値が代入されない場合がある。(初期値がNullになる)
NULL値のフィールドに更新をかけた場合にエラーが発生する場合がある。

もう一つは他の接続(Recordset)のOpenに対してCloseがかけられていない場合によく発生する。
我輩の場合はVBの起動時にRecordset良く発生している。
クライアント側の接続の問題であると判断している。
現在は回避策を検討中....