はじめまして、まぐろと言います。
非常に困ってます。
初めてで、あつかましい質問で申し訳有りません。
1,"X","X",,,"NM","1","NM",1,"7710000000H1610","大阪千貨","オオサカセンカ","東
京市","トウキョウシ","","",,,,,,,,,,0,0,0,,,"0",0,,,"61","0",2,1,,"0000000",
"0000000",,,,,,,,,,,,,,,,,,,"000",
上記のようなテキストデータが入力データです。
左から、データの内容を紹介します。
レコード番号、会社コード、店コード、卸対象コード、予備、ファイル区分、
メンテ区分、
以降実際のデータと言う構成に成っています。
尚、上記データをある条件により振り分けをおこないます。その条件と言うの
が、色々とややこしいのですが、
パターンがあります。
振分け条件1.
会社コード、店コードに"X"が入ってれば、全てにそのデータを振分け
(20個のテキストファイルに書き出します)ます。
振分け条件2.
会社コードが"X"で、店コードに特定の店コードが入ってれば、そのテキストデ
ータに入れます。これが約
20店程有ります。(尚、店は将来的には増える予定)現時点は001〜02
0までです。
以上が各テキストデータを振分ける条件です。
上記の件を存在する2種類の配信コントロールテーブルと比較させます。
CON01:会社コード、店コード、卸対象コード
CON02:店コード、更新NO
特に、CON02に関しては読み込んできたレコード番号は、ここで使用する
更新NOとは違うので、
ここで、CON02の更新NOの番号に振替ます。(1回目)2回目以降は、
ここの更新NOにはテキストに
出力するさいの番号になるので、+1してから書き出しを行おうとしています
。
VBは、初めてなので何かサンプルになるようなコードが有れば、
ずばり教えて下さい。
よろしくお願い致します。
日がありません。
m(__)mペコ
こんばんは、まぐろです。
レスが中々つかないので、自分なりに仕様をまとめてみました。
下記をご覧下さい。
お力を貸して頂きたく、お願い申し上げます。
1.テキストデータをSqlServerのDBに一旦データをインポートする。
2.そのテーブルから、SQLでデータを抜出します。
3.その際にコントロールテーブルと、テキストデータをインポートした
テーブルと突合せを行い、条件の合ったものに対してテキストデータに吐き出し
を行います。
4.その際に、吐き出したデータのレコード番号を保存する。
5.最後に、テキストデータを店毎に作成できたら、クライアントから取りにくるのを
待つだけに成ります。
次にマシン環境を書きます。
OS:NT-Server2000
DB:SQL-Server
言語:VB
【レイアウト】
A.TXTの内訳
会社コード、店コード、卸区分、予備、ファイル区分、メンテ区分、フィールド1〜54
01、00000001、1、、NM、1、・・・・・、
X、X、、、NM、1、・・・・・、
上記のデータで、会社コードと店コードにXが入ってれば、全社、全店に関係するデータです。
卸区分で、1が入ってれば、卸対象データのです。
インポートするテーブルA
テキストデータと同様のフィールド構成です。
コントロールテーブルA
会社コード、店コード、法人コード、卸区分
01、00000001、00000001、1
01、00000002、00000001、
01、00000003、00000002、
02、00000001、00000002
02、00000002、00000003、1
のイメージでデータが入ってるテーブルです。
コントロールテーブルB
店コード、レコード更新番号
00000001、000000001
00000002、000000001
00000003、000000001
00000004、000000001
00000005、000000001
B.TXTの内訳(最終的に書き出されるテキストファイルです。)
会社コード、店コード、卸区分、予備、ファイル区分、メンテ区分、フィールド1〜54
01、00000001、1、、NM、1、・・・・・、
01、00000001、1、、NN、1、・・・・・、
01、00000001、1、、NN、1、・・・・・、
01、00000001、1、、NJ、1、・・・・・、
01、00000001、1、、NJ、1、・・・・・、
01、00000001、1、、NM、1、・・・・・、
01、00000001、1、、NM、1、・・・・・、
「回答」がつかないのは、「質問」ではなく「開発依頼」だからだと
おもいますよ。
特に納期がシビアな開発なら、
DBを専門に受託しているソフトハウスは山のようにありますから、
そちらに相談されたほうが確実ですよ。
基本的にこの種の掲示板は、VB愛好者が
互いの技術向上のために存在しますから、
「ヒント」を教えてくれるのを「気長に待つ」
つもりでないと・・・。
互いに自分の時間を融通してやっているのですから、
「時間がない」とか「サンプルコードをよこせ」とかいうのは
どちらかというと歓迎されません。
「いつ答えるか」とか「サンプルを示すか」とかは
回答者側の裁量の問題ですから。
ちなみに、私の場合「時限指定」や「サンプル要求」や、ついでにいうと
「他サイトとのマルチポスト」をみつけた場合などは
原則として回答しないことにしています。
Sayさん、すいませんでした。
そりゃそうですよね。。。
皆さん、時間の合間を縫って応えてくださってるんですから。。
反省したいと思います。
そこで、少し自分成りにコードの方を書きました。
VBから、SQLServerのテーブルにテキストデータをインポートを行う為の
下記のようなコードを書きました。
しかし、上手くコンパイルが通りません。
誰か、分かる方ご指導の程、よろしくお願い致します。
Dim sTMP As String
Dim StrTmp As String
Dim ID As Integer
Dim Rst As Recordset
Dim Pos As Integer
Dim StrPath As String
Dim Mydb As Database
Dim Mydata As Recordset
Dim Para00 As String
Dim I As Integer
Private Sub main()
'***** ファイル読込 *****
sTMP = ""
StrPath = "C:\TESTX.txt"
Set Rst = CurrentDb.OpenRecordset("TESTDB", dbOpenDynaset)
'シーケンシャル入力モード+読込専用で開きます
Open StrPath For Input Access Read As #1
'ファイルの中身がなくなるまでループ
Do While Not EOF(1)
'1行目を取得する。
Line Input #1, sTMP
'iの初期化
I = 0
'***** 1件目の処理 *****
'取得したsTMPの","の場所を取得
Pos = InStr(1, sTMP, ",")
'左から","の場所までをIDにいれる。
ID = Left(sTMP, Pos - 1)
'IDでデータを探す。
Rst.FindFirst "ID = " & ID
If Rst.NoMatch Then
'IDで重複しなければ挿入
Rst.AddNew
End If
'データがなくなるまでループ
Do While IsNull(sTMP) <> ""
'取得したsTMPの","の場所を取得
Pos = InStr(1, sTMP, ",")
If Pos <> 0 Then
'左から","の場所までをIDにいれる。
StrTmp = Left(sTMP, Pos - 1)
'","から最後までsTMPにいれる。
sTMP = Right(sTMP, Len(sTMP) - Pos)
'テーブルi項目目にデータを入れる。
'数字だったら、データ変換
If IsNumeric(StrTmp) Then
Rst.Fields(I) = CLng(StrTmp)
Else
If IsNull(StrTmp) = "" Then
'空データはNULL
Rst.Fields(I) = Null
Else
'頭の"削除・お尻の"削除
Rst.Fields(I) = Mid(StrTmp, 2, (Len(StrTmp) - 2))
End If
End If
I = I + 1
Else
'最後に","をsTMPにいれる。
sTMP = Right(sTMP, Len(sTMP) - Pos) & ","
End If
Loop
Rst.Update
Loop
Close 1
Rst.Close
Set Rst = Nothing
End Sub
コンパイルエラーはどこで発生するのでしょう?
とりあえず定義やそのスコープ、参照設定等を見直してみては。