SQLを使用しています。
商品コードが1フィールドにカンマ区切りで複数格納されています。
それを変数に格納していきたいのですがどうもうまくいきません。
格納状態→ ,755,333,6,11585,857 のような状態です。
よろしくお願い致します。

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

DB 意味」に関するQ&A: DBエラーの意味

A 回答 (3件)

私もここ最近に同じ事で悩んでましたよ。


VBで、For~NextとInstr関数で取れますよ!

(例)
Dim i As Integer
Dim j As Integer
i=0
j=1

For i=1 to Len(商品コード)
変数=Instr(j,商品コード,",")
Next i
で取れると思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
処理できました。

お礼日時:2001/09/08 15:59

split関数で出来ます



<配列の変数>=split(<データ>,",",-1,1)

これでカンマ区切り毎のデータが配列の変数に入りますので
<配列の変数>(要素)で 取り出してください

Hairetu=sprit(data,",",-1,1)
response.write hairetu(0)

で data内の一番目のデータが表示されます
別の変数に入れるならば

Hairetu=sprit(data,",",-1,1)
<別の変数>=hairetu(0)

です
取り急ぎ書き込みましたので、スペル・動作確認はしてません
御了承ください
    • good
    • 0

済みませんが、質問の意味が全然わかりまません。



DBの種類は何ですか?
変数に格納したいとのことですが、プログラム言語は何を使用していますか?

人に何かを聞く時は、きちんと情報提供をしましょう。

この回答への補足

データベースについてよくわからないのですが、
ODBCで、言語はASPを使用しています。
これ以外にも何か情報は必要でしょうか?

補足日時:2001/09/08 04:03
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

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

QCなどで要素の数が固定できない配列はどうやって実現しますか?

配列について質問します。

BASIC系では配列は動的配列で要素の数が自由に変えられます。
ですが、C等では宣言時に配列の要素の数を決めておかねばならなかったと思います。
もし、C等で要素の数がわからないけど、配列を使いたい場合、どうすればいいのでしょうか?
どのように実現するのでしょうか?
配列と同じ使い勝手なら配列でなくともかまいません。

今はVBAでプログラムを組んでいるので、動的配列を使えばすむのですが、いずれ他の言語に移植したいので、できるだけ使わないようにしたいと思っています。

よろしくお願いいたします。

Aベストアンサー

malloc等のメモリ確保はNo.1さんの回答のリンクが詳しいですね。
C言語でプログラムを組む場合は、大抵はこれらメモリ操作関数のお世話になります。

これに加えて、C++やJavaのライブラリでは、動的配列クラスというものが使えます。
C++だとvectorやlist、JavaだとVectorやArrayListあたりですね。
他にも、言語や環境に依存したライブラリ、フレームワークで
様々な動的配列の機構が用意されていたりします。

簡単にまとめると、
・malloc、free、realloc等を使う方法 → ReDim
・動的配列クラス → Collection
のようなものだと考えてください。

Qカンマ区切りで格納するカラムって設計上ありでしょうか?

例えば、1,2,5,8,9,10
というような形でデータを格納するカラムをテーブルに作ろうと思っているのですが設計上ありでしょうか?
格納したあとは、それSELECTのIN(1,2,5,8,9,10)で
使用するのが主で、更新時のキーが別にあればOKという感じでしょうか?
こういう場合に、このような設計をした事があるよ。いった例など教えていただけると幸いです。

Aベストアンサー

「設計上あり」とは、CSV入出力を考慮しての事でしょうか?

データベースソフトでは、テキスト入出力をする場合に区切り文字をデフォルトの「,」以外にもタブとか任意の文字に設定できることが多いので、その意味では「あり」です。Mysql、firebird、ACCESS、桐いずれもOKです。

あと「更新時のキーが別に云々」のところもよく意味がわからないのですが...

学術的意味合いで「データベースとはかくあるべき」というのがあるのかどうかは知りませんが。

QC#かJavaで、配列の中から別の配列を探し出す

お世話になります。

C#かJava(CやC++は入れない)で、特定の配列の中に、該当する
配列があるかどうかを調べるメソッドがあれば、教えてください。

例えば…

int[] a={0,0,0,1,2,3,4,5,6,7};
int[] b={3,4,5};

ならば、『5』が返ってくるなどです。

力技では、aの配列を順にみていき、bの一番目と同じなら、
お互いの配列の次の要素を比較…などとやっていくのですが、
これらの方法を、標準のメソッドがあれば…と思い、
質問させていただきました。

以上、よろしくお願いいたします。

Aベストアンサー

Javaだけの話です。(以下、indexはbの添字)
int型配列aに含まれるint型配列bの要素の先頭の添字だけ欲しい場合
Arrays.binarySearch(a,b[index]);
int型配列aに含まれるint型配列bの要素の全添字欲しい場合
Arrays.binarySearch(a,from,to,b[index]);//from,toは配列aの走査対象要素

配列がオブジェクト型でもいいなら、Listを実装したクラス(ArrayListなど)に放り込みます。

オブジェクト型配列aに含まれるオブジェクト型配列bの要素があるか否か
listA.contains(b[index]);
オブジェクト型配列aに含まれるオブジェクト型配列bの要素の先頭の添字だけ欲しい場合
listA.indexOf(b[index]);
オブジェクト型配列aに含まれるオブジェクト型配列bの要素の最後の添字だけ欲しい場合
listA.lastIndexOf(b[index]);

最初に見つかる添字だけ欲しいなら標準ライブラリで取得できますが、
全添字が欲しいとなると途端に泥臭くなります。

Javaだけの話です。(以下、indexはbの添字)
int型配列aに含まれるint型配列bの要素の先頭の添字だけ欲しい場合
Arrays.binarySearch(a,b[index]);
int型配列aに含まれるint型配列bの要素の全添字欲しい場合
Arrays.binarySearch(a,from,to,b[index]);//from,toは配列aの走査対象要素

配列がオブジェクト型でもいいなら、Listを実装したクラス(ArrayListなど)に放り込みます。

オブジェクト型配列aに含まれるオブジェクト型配列bの要素があるか否か
listA.contains(b[index]);
オブジェクト型配列aに含まれるオ...続きを読む

Qエクセルデータをテキストファイル(カンマ区切り)に変換しアクセスへインポートしたい。

タブ区切りは出来るのですが、アクセスにインポートが出来ません。エラーが出てしまいます。(エラー内容はフィールド名が不正です。)
カンマ区切りだと以前問題なくアクセスへインポートできたので、エクセルをカンマ区切り?のテキスト形式にしたいのですが・・。
"郵便番号" "住所" ・・・・・のような

Aベストアンサー

EXCELで、「名前を付けて保存」で形式を「カンマ区切り」にして、
ファイル名欄の「ファイル名」前後をダブルクォーテーション(Shift+2)でくくってください。指定どおりの名前で保存できますよ。
例;TEST.XLSを保存する際、ファイル名欄が TEST なら "TEST.TXT" とする。



でも、アクセスで直接「EXCELからのインポート」ではだめなのですか?

QC言語の2次元配列 容量が大きすぎる場合の対処方法

私はC言語をもちいて2次元配列を作ろうとしています。

しかし、配列数が double c[10000][10000];
と大きいものにすると、エラーになってしまいます。

もちろん小さい double c[10][10];
のような配列では問題ありません。

malloc関数とかも調べたのですがなかなかいい文献が見つからずに
困っています。
どうかいいご意見があればよろしくお願いします。

Aベストアンサー

No.5です。
>今はa[],b[]に10000個の配列があります。これをc[a][b]に格納するためにどうするか、例文を書いていただいてもよろしいでしょうか?

例文ではありませんが、感じだけ書きましたので参考にしてください。
パラメタの順序や型は正しくないと思いますので、各関数はよく調べて使ってください。あくまで、こんな感じ、ということです。
-------------------
#include <stdio.h>
#include <io.h>

double read_c(FILE *fp, int x, int y) {
 double c;
 fseek(fp,(x*10000+y)*8L, SEEK_SET);
 fread(&c, 1,8, fp);
 return c;
}

void write_c(FILE *fp, double *c, int x, int y) {
 fseek(fp,(x*10000+y)*8L, SEEK_SET);
 fwrite(c, 1,8, fp);
}

int main(void)
{
 FILE *fp;
 double c,s;
 int x,y;
 int a[10000],b[10000];
 
 fp = fopen("c.dat","w+b");// double c[10000][10000]; の意味
 
 for(x=0; x<10000; x++) {
  for(y=0; y<10000; y++) {
   c=a[x]*b[y];
   write_c(fp, &c, x,y);// c[x][y]=a[x]*b[y]; の意味
  }
 }
 
 for(x=0; x<10000; x++) {
  s=0;
  for(y=0; y<10000; y++) {
   s += read_c(fp, x,y);// s += c[x][y]; の意味
  }
  b[x] = s / 10000;
 }
 
 fclose(fp);
 return 0;
}

No.5です。
>今はa[],b[]に10000個の配列があります。これをc[a][b]に格納するためにどうするか、例文を書いていただいてもよろしいでしょうか?

例文ではありませんが、感じだけ書きましたので参考にしてください。
パラメタの順序や型は正しくないと思いますので、各関数はよく調べて使ってください。あくまで、こんな感じ、ということです。
-------------------
#include <stdio.h>
#include <io.h>

double read_c(FILE *fp, int x, int y) {
 double c;
 fseek(fp,(x*10000+y)*8L, SEEK_SET);...続きを読む

Qクエリのフィールドに 式1:DateAdd("d",-2,Date()

クエリのフィールドに 式1:DateAdd("d",-2,Date()) と入力し、実行すると、2日前の日付ではなく、2年前の同じ日付となってしまいます。何が原因か分からず困惑しています。ご教授よろしくお願いいたします。

Aベストアンサー

http://groups.google.az/group/microsoft.public.jp.access/browse_thread/thread/7512043f698bb493
行き詰まったのでGoogle。
上記ではレスがつかなくてOSの再インストールまでしたそうです。
(クリックしても飛ばないかもしれませんのでその際はアドレスをコピペ)
どうも似たような症状。

初心に立ち返って、思いつくままに。
・メニューのヘルプから『アプリケーションの自動修復』
・新規データベースでも発生するか
・ADOのバージョンが古いので、2.5まで上げてみる。Microsoft ActiveX Data Object 2.5 Library
2.1のチェックは外して、プルダウンメニューの中央辺りに2.5があります。
最新は多分、2.8以降になっているかと思います。
・メニューから(VBEでは無い方)『ツール』→『オプション』→『全般タブ』
新規データベースの並び順が、日本語 UniCode であれば、日本語に変更。
これで新たに作ってみて試す。
これで駄目なら私は降参です。

※Microsoft DAO 3.6 Objects Libraryのチェックは戻して置いてください。

http://groups.google.az/group/microsoft.public.jp.access/browse_thread/thread/7512043f698bb493
行き詰まったのでGoogle。
上記ではレスがつかなくてOSの再インストールまでしたそうです。
(クリックしても飛ばないかもしれませんのでその際はアドレスをコピペ)
どうも似たような症状。

初心に立ち返って、思いつくままに。
・メニューのヘルプから『アプリケーションの自動修復』
・新規データベースでも発生するか
・ADOのバージョンが古いので、2.5まで上げてみる。Microsoft ActiveX Data Object 2.5 ...続きを読む

Qc言語の配列の先頭アドレスが偶数アドレスとなる理由について

c言語の配列の先頭アドレスが偶数アドレスとなる理由について

下記のように実行結果をで見ると、配列Sの先頭アドレスと配列Cの先頭アドレス共に偶数アドレスなる理由を教えて頂きたい。

/*list0105*/
#include <stdio.h>
main()
{

char na=1;
char nb=1;
char c[2] ={1,2};
char s[3] = {1,2,3};
char nc=1;
char nd=1;

printf("%p\n",&na);
printf("%p\n",&nb);
printf("%p %p \n", &c[0],&c[1] );
printf("%p %p %p \n", &s[0],&s[1] ,&s[2] );
printf("%p\n",&nc);
printf("%p\n",&nd);


}

実行結果
0xbffff8cf
0xbffff8ce
0xbffff8cc 0xbffff8cd ← c配列
0xbffff8b0 0xbffff8b1 0xbffff8b2 ← S配列
0xbffff8af
0xbffff8ae

c言語の配列の先頭アドレスが偶数アドレスとなる理由について

下記のように実行結果をで見ると、配列Sの先頭アドレスと配列Cの先頭アドレス共に偶数アドレスなる理由を教えて頂きたい。

/*list0105*/
#include <stdio.h>
main()
{

char na=1;
char nb=1;
char c[2] ={1,2};
char s[3] = {1,2,3};
char nc=1;
char nd=1;

printf("%p\n",&na);
printf("%p\n",&nb);
printf("%p %p \n", &c[0],&c[1] );
printf("%p %p %p \n", &s[0],&s[1] ,&s[2] );
pr...続きを読む

Aベストアンサー

メモリの配置はコンパイラとコンパイルオプションに依存します。
デフォルトだと、32ビットのメモリ処理単位=4バイトとか8バイトが多いかと。
理由は32ビットCPUが4バイト単位でメモリにアクセスするのでアクセス効率を優先したためです。

例えば、
0xbffff8cc 0xbffff8cd ← c配列
0xbffff8ce 0xbffff8cf 0xbffff8d0 ← S配列
だとしたら、S配列の内容全てを参照するためにCPUは0xbffff8ccと0xbffff8d0の合計8バイトにアクセスする必要が出てきます。無駄ですよね。

Qテキスト(カンマ区切り)のインポートの方法

アクセス初心者です。
以下の内容をACCESS2000で行う場合の方法を教えて下さい。

1、B.csvをA.mdbにデータをインポート

2、ファイル構成は
 コントロールセクション 発注先メーカーの情報 項目数 10
 ヘッダセクション 邸名情報 項目数 100
 データセクション 商品明細情報 項目数 45
 トレーラセクション 明細件数情報 項目数 1(ヘッダセクションと対で作成される)

3、コントロールセクション1行に対しヘッダセクション、データセクション、トレーラセクションを1セットとし繰り返される。
ヘッダセクション(邸名情報)に対しデータセクション(商品明細情報)は複数行の場合がありえる。

宜しくお願い致します。

Aベストアンサー

コントロールセクションとヘッダ・データ・トレーラセクションを関連付けるキー情報がヘッダ・データ・トレーラセクションにあって、かつ、ヘッダとデータを関連付けるキー情報がヘッダ、データの両方にあるのなら、awk とか peal と言ったツールで、
項目数=10 の行だけをコントロール.CSV に出力
項目数=100 の行だけをヘッダ.CSV に出力
項目数=45 の行だけをデータ.CSV に出力
項目数=1 の行だけをトレーラ.CSV に出力
としてから、それぞれの CSV をインポートしてやればいいと思うのですが、たぶん、そういうふうにはなってないんでしょうね。
そういうふうになっていない場合、あらかじめインポート先のテーブルの構造だけを作っておいて、VBA で
1行読み込み→対応するテーブルに書き込み
をループ処理しなければならないと思います。

QC言語でunsigned char配列を連結する方法ってありますか?

C言語でunsigned char配列を連結する方法ってありますか?

例えば
unsigned char test[]={0x00,0x02,0x03};
unsigned char test2[]={0x05,0x06};
という配列があったとして

test[]という配列のあとにtest2の配列を追加することは可能でしょうか?
{0x00,0x02,0x03,0x05,0x06}という配列になればOKです。

よろしくお願いします。

Aベストアンサー

testの領域は3バイトのため、それ以上の配列を追加することは出来ません。
もし、testのサイズが5バイト以上あれば、test2を追加することは、できます。
その場合は、memcpy(&test[3],test2,2); とすれば、
testの4バイト目からあとに、test2の2バイトが追加されます。
新たに配列を作成して良いなら、
unsigned char test3[5];として
memcpy(test3,test,3);
memcpy(&test3[3],test2,2);
とすれば、test3はtestとtest2を連結したものとなります。

QaccessのVBAで変数名でフィールド指定は?

VBAの記述として
フィールド名を指定するときに通常であれば
forms![顧客一覧]![ID]やforms![顧客一覧]![age]と記述しますが
この[ID]という部分についてあるフォームから
IDという文字があるときはIDフィールド、
ageという文字があるときはageフィールドに記述というのはできるのでしょうか?

Aベストアンサー

Dim strItem As String
strItem = "ID"
MsgBox Forms![顧客一覧].Controls(strItem)
のようなことでしょうか?


人気Q&Aランキング

おすすめ情報