テキストからMDBにデータを取込む際に、テキストの項目に、’(シングルフォーテーション)が入ってきて、INSERT文のクエリーで区切りが狂ってしまい、エラーが出てしまいます。
’(シングルフォーテーション)または ”(ダブルフォーテーション)または ,(カンマ) が入ってきても対応できる良い手段(記述方法)はないでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (3件)

だいぶ遅いので解決、対応済みかもしれませんが


INSERTで、なくてレコードセットをして
AddNewしてあげれば取り込めると思います。
しかし、パフォーマンスの面や、
取り込んだデータを利用する場合に
INSERTやUPDATE、WHERE 条件に使用できない点があります。
以上のことを考えると、’(シングルフォーテーション)または ”(ダブルフォーテーション)または ,(カンマ)などは、最初から2バイト文字で作成してあげる
か、データ上では2バイト文字で扱うを原則に、データベース設計を行い、
取込の際に念のため’(シングルフォーテーション)または ”(ダブルフォーテーション)または ,(カンマ)をチェックし
2バイト文字に変換してしまうのがいいと思います。
    • good
    • 0
この回答へのお礼

なるほど、addnewですか。
やはり後でデータを使えないと言うのはちょっとつらいですね。
結局取込の前にデータベースに入らないようにチェックを追加しました。
御回答ありがとうございました。

お礼日時:2002/03/01 23:36

実はわたしもこれで苦労しました。


商品マスタを読み込む時に例えば商品名が「3.5"FDD」という商品が存在します。
これをやられたら、OUTです。
対策方法は、CSVに落とす側で、区切り方法を固定長や、タブ区切りを使うなど工夫ができるといいのですが...

だめなら、エディタで直すか、マスタを書き換える方法しか思いつきません。
    • good
    • 0
この回答へのお礼

やはり苦労しましたか、会社の人にもいろいろきいたのですが、解決できなかったので質問いたしました。

やはりデータを直すしかないですかね...

御回答ありがとうございました。

お礼日時:2002/02/25 00:02

INSERT文で取り込めるテキストは、CSV形式です。



拡張子がCSVであればCSVファイルというわけではありません。
ファイルの形式が「何々区切り」というのが定義です。
区切りのパターンが多数あるのであれば、それはCSVファイルとは呼べません。

テキストファイルを作りなおすことをお薦めします。


1.ファイルを読む
2.Replace関数でシングルコーテをダブルコーテに変換する
3.ファイルを書き出す
4.テキストをインポートする(INSERT文の実行)
    • good
    • 0
この回答へのお礼

ちょっと質問の仕方が悪かったですね。
区切りのパターンが複数あるのではなく、テキストに何が入ってきても良いと言ういみです。すいません

やはりテキストの作り直しですかね?

Replace関数ですか?試してみます。

御回答ありがとうございました。

お礼日時:2002/02/25 00:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QEXCEL VBAでカンマ区切りテキストファイルに変換する方法

EXCELで作成したシートをVBAでカンマ区切りテキストファイル(CSVファイルではなく)に変換する方法を教えてください
下記のプログラムではテキストファイルに変換されますが、カンマ区切りになりませんでした。

Sub Samp()
ActiveWorkbook.SaveAs Filename:="C:\WINDOWS\aa.txt", FileFormat _
:=xlText, CreateBackup:=False
End Sub

Aベストアンサー

CSVもテキストファイルです。

出力形式がテキスト出力になっているので、
FileFormat:=xlCSV
として下さい。

Q実行時エラー'1004': アプリケーション定義またはオブジェクト定義のエラーです。

Excel VBA(Excel2000)について質問です。
セルの入力規則を設定するvalidationプロパティ設定時に表記エラーが起こるのですが、どういった原因なのか知りたいです。
そのエラーを起こす手順ですが、
1. 新規ブックを作成する
2. Visual Basic Editorを使用して、Sheet1に以下のコードを埋めこむ:

Private Sub Worksheet_Activate()
  With Cells(1, 1).Validation
    .Delete
    .Add Type:=xlValidateList, Formula1:="test1,test2"
  End With
End Sub

3. Sheet1 ←→ Sheet2 or Sheet3をタブで切り替える
  → 問題なく作動する
4. Sheet1の任意の場所に、コントロール ツールボックスのコマンドボタンを配置する
5. Sheet1 ←→ Sheet2 or Sheet3をタブで切り替える
  → これも問題なく作動する
6. 4.で配置したコマンドボタンを押す
7. Sheet1 ←→ Sheet2 or Sheet3をタブで切り替える
  → 表題のエラーが発生する

といったように、ボタンやチェックボックス等を配置したシートにおいてvalidation.addメソッドを使用すると、何故かエラーが発生します。この発生パターンが見つかるまでずっと悩んでいました。
今現在は、一応、他の方法で回避できてはいますが、どうしてこのエラーが出るのかはっきりしたいので、ご存知の方はどうぞご指導お願い致します。

Excel VBA(Excel2000)について質問です。
セルの入力規則を設定するvalidationプロパティ設定時に表記エラーが起こるのですが、どういった原因なのか知りたいです。
そのエラーを起こす手順ですが、
1. 新規ブックを作成する
2. Visual Basic Editorを使用して、Sheet1に以下のコードを埋めこむ:

Private Sub Worksheet_Activate()
  With Cells(1, 1).Validation
    .Delete
    .Add Type:=xlValidateList, Formula1:="test1,test2"
  End With
End Sub

3. Sheet1 ←→ Sheet2 or S...続きを読む

Aベストアンサー

> 6. 4.で配置したコマンドボタンを押す

この操作でコマンドボタンがアクティブ状態になってしまうのが原因のようですね。これはチェックボックスとかリストボックス等でも起こると思います。
最も簡単な対処方法としては、Cells(1,1).SelectとかRange("A1").SelectをWith Cells(1, 1).Validation の前に記述し、特定のセルをアクティブにする方法でしょう。

QTXTファイルをMDBファイルに取込みたい

VB6を勉強しながら、実際の実務に役立つVB6のプログラムを作ろうとしていた者です。
実際に、他の外部委託のシステムと一緒に社内ユーザーに渡すものなのです。
しかし、この10月から人事異動で他の部署に異動となり、1ヶ月掛けてゆっくりやろうと思っていたのものの、それでは引継ぎ者に迷惑を掛けてしまうことになります。
すみませんが、どなたか教えて下さい。
タイトル行の無い2項目程のTXTファイル(固定長)をMDBファイルのテーブルに取込みたいのです。
宜しくお願いします。

Aベストアンサー

参考URLのAccessサンプル2番目あたりがいいかも

Accessでできているけど、VBに移植できます。

参考URL:http://www.geocities.co.jp/SiliconValley-Cupertino/8157/

Qカンマ区切りのデータを処理する方法

よろしくお願いします。
vb6.0 + oracle9i(oo4o)で開発しています。
元データの中には、カンマ区切り形式で全角・半角・ブランクありの可変長です。(テキストデータではありません)
例えば、
111bb,22222,333333,44bb
11,234bb,33bb,44     見たいなデータです。
カンマの数は変わりませんし、各項目自体にカンマはありえません。
この各項目を個々に取り込んで処理したいのですが...

MID関数(MID$,MIDB)など色々試してみるのですが
対応しきれなくなってしまいました。

各項目に対してTRIMをかけて処理をしたいのですが、
良い方法はあるのでしょうか?
カンマ間を一つの項目として判断でき、
TRIMがかけれれば一番よいのですが...

文字を一文字ずつ読んでいって、カンマを判断するしかないのでしょうか?

Aベストアンサー

始めまして。
ご参考になりますが、
dim strAry() as string
strAry = split(strInput,",")
で、配列に格納できます。後は、それぞれの要素を
trimしてみてはいかがでしょうか?
ちなみに元のカンマ区切りに戻すときは
strOutput = join(strAry,",")
でできます。

QVBSでカンマ区切り

お世話になっております。
VBSで、CSVファイルをカンマ区切りで配列にし、
ファイルに書き出したいです。
下記のスクリプトを実行すると3行の改行と
これ⇒ ----------------
だけ出力されます。
Splitは使用できないのでしょうか?
どこが間違っているのかわかりません。
ご教授いただけませんでしょうか。
'---------------------------------------------------------------
On Error Resume Next
Set OBJFS01 = CreateObject("Scripting.FileSystemObject")

Set CSVTEXT01 =OBJFS01.OpenTextFile("C:\tmp\CSVTEXT.log")
Set LOGTEXT01 =OBJFS01.OpenTextFile("C:\tmp\LOGTEXT.log",8,False)
'---------------------------------------------------------------
i = 0
Dim HAIRETU(27)
Do While i < 6
HAIRETU(27) = Split(CSVTEXT01, ",")
LOGTEXT01.WriteLine(HAIRETU(2))
LOGTEXT01.WriteLine(HAIRETU(3))
LOGTEXT01.WriteLine(HAIRETU(4))
LOGTEXT01.WriteLine("----------------")
i = i + 1
Loop

LOGTEXT01.close
CSVTEXT01.close

お世話になっております。
VBSで、CSVファイルをカンマ区切りで配列にし、
ファイルに書き出したいです。
下記のスクリプトを実行すると3行の改行と
これ⇒ ----------------
だけ出力されます。
Splitは使用できないのでしょうか?
どこが間違っているのかわかりません。
ご教授いただけませんでしょうか。
'---------------------------------------------------------------
On Error Resume Next
Set OBJFS01 = CreateObject("Scripting.FileSystemObject")

Set CSVTEXT01 =OBJFS01.OpenTextFi...続きを読む

Aベストアンサー

はじめまして testAdmin さん
みなさまの回答が楽しそうだったのでお邪魔します。

さて、この質問は
>どこが間違っているのかわかりません。
>ご教授いただけませんでしょうか。
ですね。それ以上の回答は致しません。新たな疑問ができた場合は新たに質問を立てて下さい。

さて、まずあなたの書いたスクリプトは正しく解釈され正しく実行されています。私から見れば当たり前の結果が当たり前のように出ているだけです。


'---------------------------------------------------------------
On Error Resume Next'以降全てのエラーを無視し処理をします
Set OBJFS01 = CreateObject("Scripting.FileSystemObject")

Set CSVTEXT01 =OBJFS01.OpenTextFile("C:\tmp\CSVTEXT.log")'ストリーム化
Set LOGTEXT01 =OBJFS01.OpenTextFile("C:\tmp\LOGTEXT.log",8,False)'ストリーム化
'---------------------------------------------------------------
i = 0
Dim HAIRETU(27)'0~27要素の配列の作成
Do While i < 6
HAIRETU(27) = Split(CSVTEXT01, ",")'配列要素27に対し指定値の受け渡し、但しsplitエラー。エラーしたためResume Nextの効果によりこの行は無視して次を処理
LOGTEXT01.WriteLine(HAIRETU(2))'初期化されない変数の代入但しWriteLineの効果により文字列に自動キャスト。結果空文字+Lineの改行=空文字改行の出力
LOGTEXT01.WriteLine(HAIRETU(3))'上記同/ちなみに初期化されない変数に格納されているのは Empty であり。空を意味するキャストされると""になる。
LOGTEXT01.WriteLine(HAIRETU(4))'上記同
LOGTEXT01.WriteLine("----------------")
i = i + 1
Loop

LOGTEXT01.close
CSVTEXT01.close


あなたの書いた内容は下記のようになります

二つのテキストストリーム作成
下記処理をループで6回行う
 配列27に対してありえない代入をしてスキップさせる
 空文字改行を出力するx3
 ハイフンの線を出力する
ループ
テキストを二つとも閉じる

さて、こうなります。
「お分かりいただけただろうか?」
と、最近知人が連呼しているのだけれどもまぁ即座に閑話休題。
見ての通りスクリプトは正しく解釈し正しく処理を行っている。
なんら問題ない。
そういえば
>Splitは使用できないのでしょうか?
なんて言っていましたっけ?いいえ、正しく動作し正しくエラーしていますよ?

・・・。

あぁまさか、splitの動作がなぜエラーするか分からない?って事でしょうか?あえてエラーさせているかと思っているのですが…。
なにせ、On Error Resume Nextを使ってエラーをスキップさせているのですから。本来正しく動作ように組んでいればOn Error Resume Nextは必要ありません。On Error Resume Nextを使うような機会は最初からエラーし得る処理でかつerr値を見て予定通りにエラーした場合中断もしくはリカバリへ変更などに使うのですから。

では、On Error Resume Nextをコメントアウトして実行してみましょう。
「C:\tmp\writecsv.vbs(11, 1) Microsoft VBScript 実行時エラー: オブジェクトでサポートされていないプロパティまたはメソッドです。」
この11行目は「HAIRETU(27) = Split(CSVTEXT01, ",")」
当たり前ですがここでエラーです。さて、では逆になぜこれがエラーしているのが説明しなければなりませんね。

さて、そもそもあなたがなぜsplitをこのように使えば正しく動くと思っているのかは私には分かりません。きっと、生まれた時から「splitはこのように扱うんだ!」と脳に刻まれていたのかも知れません。
ですが残念な事に本当にとてもとても非常に残念ながら私は最初からそんなものを知っているような脳は持ち合わせていませんでした。
では私はどのように知り、あなたの記述が間違っているかを証明せねばなりません。

さてvbsはそもそも何なのでしょうか?google先生に聞いてみたところWSHというものの一つらしいですね。
ではWSHっていうのは?Windows Script Hostというものらしいですよ。
さてWindowsは何処が提供しているのだろう?マイクロソフトらしい。
それでVBSの仕様はマニュアルは?中でも今しりたいsplitの仕様は何処でしょうか?調べてみるとMSDNというところにVBSの仕様が書かれているようです。調べてみましょう。

http://msdn.microsoft.com/ja-jp/library/cc410311.aspx
と、ここに説明がありました。
Split(expression[, delimiter[, count[, compare]]])
expression
必ず指定します。文字列と区切り文字を含んだ文字列式を指定します。引数 expression が長さ 0 の文字列 ("") である場合、Split 関数は、要素もデータもない空の配列を返します。

と、あります。
「必ず指定します。文字列…」とあります。そうですね。splitの第一引数はstringつまり文字列でなければならないのです。
「お分かりいただけただろうか?」

ん?文字列(string)を指定したつもり?私にはとてもそうは見えませんが検証して証明しなければなりませんね。

Set CSVTEXT01 =OBJFS01.OpenTextFile("C:\tmp\CSVTEXT.log")
Set LOGTEXT01 =OBJFS01.OpenTextFile("C:\tmp\LOGTEXT.log",8,False)
wsh.echo typename(CSVTEXT01)

結果
TextStream

まぁ当たり前ですが。setで渡せるのは参照値であり実値では在りません。setで作った変数がsplitで処理できるはずはありません。
setが何か分からない場合は下記を参照してください。
http://msdn.microsoft.com/ja-jp/library/cc392465.aspx


msgbox
http://msdn.microsoft.com/ja-jp/library/cc410277.aspx
とある専門家さんが「msgbox(CSVTEXT01)」なんて書いてますがmsgboxに渡せる値もstringでなければならない為どう考えてもこれもエラーします。どうしてこんな事をやらせたのか真意はわかりません。
そしてどうやって
>両方とも入っておりませんでした。
と、いう返答ができたのか実は不思議でしょうがありません。


さて、
>Splitは使用できないのでしょうか?
正しく動作します。仮におかしいと感じるのであれば正しく理解していなかっただけでしょう。
>どこが間違っているのかわかりません。
私にも分かりません。記述通り動作しているとおもわれます。

と、なるのですがこれで宜しいでしょうか?
参考URLをぜひ活用してください。
ポイントは要りません。専門家さんにでも振ってあげてください。

参考URL:http://www.google.co.jp/

はじめまして testAdmin さん
みなさまの回答が楽しそうだったのでお邪魔します。

さて、この質問は
>どこが間違っているのかわかりません。
>ご教授いただけませんでしょうか。
ですね。それ以上の回答は致しません。新たな疑問ができた場合は新たに質問を立てて下さい。

さて、まずあなたの書いたスクリプトは正しく解釈され正しく実行されています。私から見れば当たり前の結果が当たり前のように出ているだけです。


'---------------------------------------------------------------
On E...続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報