本業終了後、夜な夜な得意先に導入されるEDIシステムへの対応プログラムを開発。
疲れたよ!
得意先から渡された仕様書を読むと
業界標準の流通BMIシステム
業界標準ってどういう意味かと思ったら、何のことは無い
全業種に対応するために無駄にたくさんの項目が用意されたテーブルを持つシステムでした!
水域・産地名・等級・養殖区分・解凍・部位・カラー名称・・・・
9割以上、加工食品卸業に関係ない項目。
すごくプログラムし難いんですけど、これ!
取り合えずEDIアップロード用「実出荷データ」を用意しcsvエクスポートテスト・・・
すると、見たことのないエラー
フィールドF134の開始位置32916が有効ではありません。
開始位置は32767以内で指定してください。
何これ?
原因究明の為、項目文字数・項目数を変えながら何度もテストしたら・・・・・・
エラー原因、わかりました!
項目数が多すぎてMS-Access君がエクスポート用定義を作れないみたい!
なんだ、そんな原因ならTextStreamを使えばいいじゃん!
select caseで項目ごとの固定値も簡単に指定できる。
[vb] Private Sub btnEDIexp_Click()流通BMI開発は、TextStreamで楽勝ね!
逆に言えば、項目がバカみたいに多い流通BMI、
TextStreamを知らないと開発出来ません。
Dim i As Integer
Dim FnameS As String
i = 0
FnameS = "C:\katabe\EDIupload.csv"
Dim FSO As New FileSystemObject
Dim f As File
Dim st As TextStream
Set st = FSO.CreateTextFile("C:\katabe\EDIupload.csv")
Dim cn As ADODB.Connection
Set cn = Application.CurrentProject.Connection
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "select * from QEDIエクスポートソース", cn, adOpenKeyset, adLockOptimistic
Dim myTEXT As String
myTEXT = ""
‘検証用ヘッダー部
For i = 1 To 188
If i = 188 Then
myTEXT = myTEXT & "F" & i
Else
myTEXT = myTEXT & "F" & i & ","
End If
Next i
st.WriteLine (myTEXT)
Do While rs.EOF = False
myTEXT = ""
For i = 0 To 187
Select Case i
Case 0
myTEXT = rs.Fields(i)
Case 4, 8, 9, 13, 26, 39, 45, 98, 100, 111, 123, 132, 139, 142, 145, 153, 161
myTEXT = myTEXT & "," & rs.Fields(i)
Case 5
myTEXT = myTEXT & ",00" ‘固定00
Case 19
myTEXT = myTEXT & ",03" ‘固定03
Case 33
myTEXT = myTEXT & ",02" ‘固定02
Case 66
myTEXT = myTEXT & ",999" ‘固定999
Case 84
myTEXT = myTEXT & ",00" ‘固定00
Case 89
myTEXT = myTEXT & ",01" ‘固定01
Case 133
myTEXT = myTEXT & "," & Date()
Case 155
myTEXT = myTEXT & ",1" ‘固定1
Case Else
myTEXT = myTEXT & ","
End Select
Next i
st.WriteLine (myTEXT)
rs.MoveNext
Loop
rs.Close
cn.Close
st.Close
Call Shell("notepad.exe C:\katabe\EDIupdate.csv", 1)
End Sub
[/vb]
これまでの物件は全てヘッダー・フッターが必要だった為、最初からTextStreamで開発してました。
その為、今回のエラーに遭遇しなかったのかな?

コメントを残す