COBOLを使ったプログラミングをすることになりました。
全くプログラミング未経験の新卒でして、三ヶ月の研修でjava、PHP、SQLあたりは多少触れましたがほぼほぼど素人です。
練習課題としてINVALID KEY句を使った索引読みをし、別テーブルからデータを持ってきて更新するプログラムを作っているのですが、仕組みがいまいちわからず大変苦戦しています。

MOVE キーとして欲しい値 TO KEY項目.
READ テーブル
INVALID KEY
該当しないデータだったときの処理
NOT INVALID KEY
該当するデータだったときの処理
END-READ.

というような感じだよと(すみません、これも良く分かっておりません)教わったのですが、なぜこれで狙ったレコードを引き出すことができるのでしょう?
例えば会社コード・会社名・住所が入ったデータテーブルAと、幾つかの会社コードだけが登録されたテーブルBがあったとして、Aの会社コードがキー項目になっていたとします。
その場合はBの会社コードをAの会社コードにMOVEし、AをREADする…という流れになると思うのですが、

1、もしAテーブルにおいてMOVEされた会社コードに該当するコードが4行目にあったとしてもいきなり4行目を読んできてくれるのですか?
2、参考サイトなどを見ると「これをキーにして読む」「キーがあれば読む」と書いてあったりするのですが、そもそもキーにする、キーがある・ないというのはどういうことでしょうか?
3、冒頭のMOVEというのはどこに対してMOVEしているのですか?KEY項目というのはWORKING SECTIONで宣言した変数の一つだと思うのですが、これがどうしてテーブルデータを読むときに作用するのですか?

どれもこれも的外れな質問かもしれませんが、本当に困っています。
どうかご教授のほどよろしくお願いいたします。

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

A 回答 (2件)

こういうようなシステムですか?


https://www.support.nec.co.jp/DownLoad.aspx?file …

データーベース機能の部分に詳細な記述があります。これを手掛かりに理解できるかもしれません。(COBOLは使ったことがありませんのであしからず。COBOLは古い言語ですからCOBOLに組み込まれているDATABASEシステムによってやり方が統一されていないのでは?)
    • good
    • 0

昔の記憶を頼りに書いているので間違っているかもしれませんが、



>1、もしAテーブルにおいてMOVEされた会社コードに該当するコードが4行目にあったとしてもいきなり4行目を読んできてくれるのですか?

MOVEしただけでは読み込まれません。
READして読み込まれます。

> 2、参考サイトなどを見ると「これをキーにして読む」「キーがあれば読む」と書いてあったりするのですが、そもそもキーにする、キーがある・ないというのはどういうことでしょうか?

テーブルの定義を最初に行っていると思いますがそこでキー項目の設定を行っています。

> 3、冒頭のMOVEというのはどこに対してMOVEしているのですか?KEY項目というのはWORKING SECTIONで宣言した変数の一つだと思うのですが、これがどうしてテーブルデータを読むときに作用するのですか?

2、同様テーブルの定義を行うときにキー項目の定義も行っています。
    • good
    • 0

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

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

QSQL文(テーブル項目名が特殊文字)

SQL文では、全角の「No.」が特殊文字なため、[ ]でくくらないといけません。 表示項目では、通常これだけで良いのですが、FROM句では、【無効です】のエラーが発生してしまいます。

SELECT [a.受注No.] 受注No,手配数 FROM jyuchu AS a LEFT OUTER JOIN tehai AS b ON [a.受注No.]=[b.手配No.]

テーブルの項目名に、このような特殊文字を使用しないのが良いのですが基幹系コンピュータとの関係があり、それもできません。

カッコやASを駆使したのですが、どうしても上手くできません。
良いお知恵がありましたら教えて頂けないでしょうか?
よろしく、お願いいたします。

Aベストアンサー

ダブルコーテーション(")でくくってみるのは、どうでしょうか?

あとデータベースによっては、SQLの仕様に違いがあるので、使用しているデータベースがなんなのか、書いたほうが、回答が得られやすいのではないでしょうか?

QACCESS2003:サブフォームに他のテーブルの項目を表示

ACCESS2003:サブフォームに他のテーブルの項目を表示

現在メインフォームの中にサブフォームを組み込んでいます。

[前提条件]
※1 サブフォームの参照テーブルを仮にテストテーブルとします。
※2 サブフォームの項目をA,B,C,Dの4項目とします。
※3 テスト1テーブルの項目はA,B,Cの3項目とします。
※3 テスト2テーブルの項目はA,D,Eの3項目とします。

その場合、A,B,Cはテスト1テーブルの内容をそのまま表示するので問題ないのですが、
D,Eの項目はテストテーブルに存在しないので、Aをキーにしてテスト2テーブルから
データを取得して表示したいのです。

初歩的な質問で申しわけありませんが、ご回答を宜しくお願いします。

Aベストアンサー

テスト1テーブルとテスト2テーブルをクエリで連結して、それをサブフォームで表示すればいいのでは?

QVBSでCSVのキー項目の取得

VBSでCSVファイル(UnicodeBE BOMなし)内のデータを
キー項目(コード)ごとに分け、
それぞれ別のCSVファイルに出力しようとしています。
(ファイル名にコードを付与することで別々にします。)
しかし、キー項目の取得に失敗しているようで
分岐処理が正しく行われていません。

CSVファイル(test_in.csv)は以下のような形式です。
(実際のファイルに項目行はありません)
連番,コード,フラグ,日付
1,0001,A,20091001
2,0002,A,20091001
3,0002,U,20091002
4,0001,D,20091003

以前、こちらで質問し、ご回答頂いた内容を基に
処理を実装しました。

Option Explicit

Dim iSt
Dim tPath
Dim oFso
Dim stdOut
Dim aLine
Dim field
Dim wk

Set iSt = WScript.CreateObject("ADODB.Stream")
iSt.Open
iSt.Type = 2 'バイナリ
iSt.Charset = "UTF-16BE"
iSt.LoadFromFile("test_in.csv")
iSt.LineSeparator = -1 'CRLF
iSt.Position = 0
tPath = "E:\\test_out.csv"
Set oFso = CreateObject("Scripting.FileSystemObject")
Set stdOut = CreateTextFileBE(oFso,tPath)

Do While Not iSt.EOS
aLine = iSt.ReadText(-1)
field = split(aLine,",")
aLine = join(field,",")
if field(1) = "0002" then
WriteLine stdOut,aLine
end if
Loop
iSt.Close
oFso.Close
Set iSt = Nothing
Set oFso = Nothing
WScript.Quit

Function CreateTextFileBE(fso,Path)
fso.CreateTextFile(Path).Write Chr(&HFE) & Chr(&HFF)
Set CreateTextFileBE=fso.OpenTextFile(Path,8,,True)
End Function

Sub WriteLine(stdOut,Line)
stdOut.Write Line & vbCrLf
End Sub

0002のレコードが入ったCSVファイルを出力しようとしましたが、
レコードなしのCSVファイルが作成されてしまいます。
コードごとにファイルを分ける処理についてもよくわからず、
取りあえずコードを限定し1ファイルだけの出力にしています。

VBSでCSVファイル(UnicodeBE BOMなし)内のデータを
キー項目(コード)ごとに分け、
それぞれ別のCSVファイルに出力しようとしています。
(ファイル名にコードを付与することで別々にします。)
しかし、キー項目の取得に失敗しているようで
分岐処理が正しく行われていません。

CSVファイル(test_in.csv)は以下のような形式です。
(実際のファイルに項目行はありません)
連番,コード,フラグ,日付
1,0001,A,20091001
2,0002,A,20091001
3,0002,U,20091002
4,0001,D,20091003

以前、こちらで質問し...続きを読む

Aベストアンサー

>Do While Not iSt.EOS
>aLine = iSt.ReadText(-1)
・・・
>Loop

何回ループしていますか?
ReadTextの引数を見ると、一遍に読み込んでいるようですが。
http://msdn.microsoft.com/ja-jp/library/cc389881.aspx

QAccessのテーブルへ複数の主キーを設定するには

Access2003のVBAを使って開発していますが、
サーバーから取得したローカルテーブルに
複数の主キーを設定したいのですが、うまくいきません。

ソースは下記です。

Dim db As Database
Dim Tbdef As TableDef
Dim Fld As Field
Dim Idx As Index

Set db = CurrentDb

Set Tbdef = db.TableDefs("TWorker")
Set Idx = Tbdef.CreateIndex("INDEX_WORKER")
Idx.Fields.Applend Idx.CreateField("作業者番号")
Idx.Fields.Applend Idx.CreateField("登録日時") ★
Idx.Primary = True
Tbdef.Indexes.Append Idx

★行で落ちるというか、終了してしまいます。

1つの主キーなら設定できるのですが、
複数設定する方法をご教授いただけますか。

よろしくお願いします。

Access2003のVBAを使って開発していますが、
サーバーから取得したローカルテーブルに
複数の主キーを設定したいのですが、うまくいきません。

ソースは下記です。

Dim db As Database
Dim Tbdef As TableDef
Dim Fld As Field
Dim Idx As Index

Set db = CurrentDb

Set Tbdef = db.TableDefs("TWorker")
Set Idx = Tbdef.CreateIndex("INDEX_WORKER")
Idx.Fields.Applend Idx.CreateField("作業者番号")
Idx.Fields.Applend Idx.CreateField("登録日時") ★
Idx.Primary = True
Tbdef.Indexes.Ap...続きを読む

Aベストアンサー

主キーですよね?「作業者番号」と「登録日時」
に主キーを設定するということでいいのですね?

たとえば、テーブル名は質問の「TWorker」として、

Dim db As Database
Dim strSQL As String
Set db = CurrentDb

strSQL = "ALTER TABLE TWorker ADD PRIMARY KEY (作業者番号 , 登録日時)"
db.Execute strSQL, dbFailOnError

QNS(項目)とNSMutable(項目)の違い

iOSプログラミング初心者です。
NS(項目)とNSMutable(項目)は、具体的に何が違いますか?
NSなら一度値を初期化してから値を二度と変えずに、NSMutableは何度も値を変更する項目に使うと読みましたが、NSだけを使えば初期化した値を変えないわけがないのに、どうしてわざわざNSMutableを使わないといけないのですか
メモリーの割り当てと解放と関係がありますか?NSMutableはどういうメリットがありますか?
わかる方がいらっしゃいましたら、教えていただきたいのです。
よろしくお願いします。

Aベストアンサー

> NSなら一度値を初期化してから値を二度と変えずに、NSMutableは何度も値を変更する項目に使うと読みましたが、

外れているとはいいませんが、当たっているともいえません。
Mutableがつくコレクションクラスは、可変長であるのが違いです。
たとえばNSArrayは、生成、初期化するとき、かならず要素数が決まっていなければなりません。対してNSMutableArrayは、「addObject:」で要素を追加したり、「removeObject:」で要素を削除して、総要素数を変化させることができます。
NSArrayでも、要素であるオブジェクトの内容を変更することは可能です。だから「NSなら一度値を初期化してから値を二度と変えずに、」ということはいえません。

こういう違いは、それぞれのクラスのリファレンスを、ぼーっと眺めているだけで、見えてきます。Xcodeのヘルプで、かんたんにクラスのリファレンスを閲覧できるのですから、活用しない手はありませんし、活用するしないで、あなたの進歩に雲泥の差ができるでしょう。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報