VISUAL BASIC 01

1. SQL文を飛ばす(1)
SELECT文を使って、SQL文を操作する

Function Select_Order()

'変数の宣言。DsとField()は必要になる
Dim i As Integer
Dim Ds As Object, Field() As Object
Dim intRtn As Integer


'ホスト変数のセット
'mydbParaSetを使って、gOrder_no の値を、order_noというDB内の変数に格納する

mydbParaSet "order_no", Trim(gOrder_no)

'受注テーブルのSELECT
'フィールドを追加したい場合は、SELECT部に変数を追加する

sqlstr = "select item_no,order_qty,cust_name,due_date,dispatch_flg,ship_flg"
sqlstr = sqlstr & " from sales_order"
sqlstr = sqlstr & " where order_no = :order_no"
intRtn = mydbDyna(Ds, sqlstr)

'Fieldオブジェクトに、動的配列を設定する

ReDim Field(Ds.Fields.Count - 1)
For i = 0 To Ds.Fields.Count - 1
Set Field(i) = Ds.Fields(i)
Next

'MyValRetをつかって、上で取得した変数をぶち込む

If rows <> 0 Then
Select_Order = 0    'intRtn=sel.Select_Order()と設定している場合は、正常にうごとゼロが入る。
MyValRet gItem_no, Field(0).Value
MyValRet gOrder_qty, Field(1).Value
MyValRet gCust_name, Field(2).Value
MyValRet gdue_date, Field(3).Value
MyValRet gdispatch_flg, Field(4).Value
MyValRet gship_flg, Field(5).Value
Else
Select_Order = 1     'ここの名前と、ファンクション名は一緒にすること。
End If
End Function

2. SQL文を飛ばす(2)
動的配列を作成して、SQL文を活用する

Function select_flgs()

Dim Ds As Object, field() As Object
Dim intRtn As Integer
Dim i As Integer


'ホスト変数のセット
'-- mydbParaSet "DB内のフィールド", 送る変数

mydbParaSet "order_no", Trim(gOrder_no)


'受注テーブルのSELECT
sqlstr = "select s.dispatch_flg, s.compl_flg, s.ship_flg"
sqlstr = sqlstr & " from sales_order s, mtl_disb m, item_master i"
sqlstr = sqlstr & " where m.order_no = :order_no AND"
sqlstr = sqlstr & " m.item_no = i.item_no"
'sqlstr = sqlstr & " order by mtl_disb.disb_no"

'---SQL文を飛ばす
intRtn = mydbDyna(Ds, sqlstr)

'---受け取った値を、VB側の変数に格納する ※配列でっせ
ReDim field(Ds.Fields.Count - 1)
For i = 0 To Ds.Fields.Count - 1
Set field(i) = Ds.Fields(i)
Next


'--- Redimを使って動的配列の作成
ReDim gDispatch_flg2(rows)
ReDim gCompl_flg2(rows)
ReDim gShip_flg2(rows)

If rows <> 0 Then
For i = 1 To rows
MyValRet gDispatch_flg2(i), field(0).Value
MyValRet gCompl_flg2(i), field(1).Value
MyValRet gShip_flg2(i), field(2).Value
Ds.MoveNext
'--- Ds MoveNextが必要になるみたい。

Next i
select_flgs = 0
Else
select_flgs = 1
End If

End Function

SQL文を飛ばす(3)
ちょっとした応用。見てみるのも価値あり

Public Function Select_OrderPR(md As Integer) As Long

If md = DB_SEL Then

'ホスト変数のセット
mydbParaSet "order_no", Trim(gOrder_no)

'受注テーブルのSELECT
sqlstr = "SELECT "
sqlstr = sqlstr & " SALES_ORDER.ORDER_NO, SALES_ORDER.ITEM_NO, SALES_ORDER.ORDER_QTY, "
sqlstr = sqlstr & " MTL_DISB.DISB_NO, MTL_DISB.DISB_QTY, "
sqlstr = sqlstr & " BOM_MASTER.CHILD_ITEM_NO "
sqlstr = sqlstr & " From "
sqlstr = sqlstr & " SALES_ORDER, MTL_DISB, BOM_MASTER "
sqlstr = sqlstr & " Where "
sqlstr = sqlstr & " SALES_ORDER.ORDER_NO = :order_no AND "
sqlstr = sqlstr & " SALES_ORDER.ORDER_NO = MTL_DISB.ORDER_NO AND "
sqlstr = sqlstr & " SALES_ORDER.ITEM_NO = BOM_MASTER.PARENT_ITEM_NO "
End If

intRtn = mydbDyna2(sqlstr, Ds, Fs(), md)

If rows <> 0 Then
MyValRet gOrder_no, Fs(0).Value
MyValRet gItem_no, Fs(1).Value
MyValRet gOrder_qty, Fs(2).Value
MyValRet gdisb_no, Fs(3).Value
MyValRet gdisb_Qty, Fs(4).Value
MyValRet gChild_item_no, Fs(5).Value

End If
Select_OrderPR = intRtn

End Function


4. ストアドプロシージャ操作(1)
ストアドプロシージャを操作する(UPDATE)

Function update_mtl_disb()

Dim F As Form: Set F = frmmain
Dim intRtn As Integer

'ホスト変数のセット -mydbParaSetを使って、変数Aに、変数B(VBから)を渡す
  'mydbParaSet "変数A", 変数B

mydbParaSet "disb_no", Trim(gdisb_no)
mydbParaSet "order_no", Trim(gOrder_no)
mydbParaSet "item_no", Trim(gItem_no)
mydbParaSet "disb_qty", CLng(gdisb_Qty)
mydbParaSet "disb_flg", CInt(gdisb_flg)
mydbParaSet "rtncd", 0 '正常に動作した場合、0を返す

'受注テーブルのINSERT ここで、PL/SQLの設定
  'mydbParaSetで値を与えた変数を使い、PL/SQL内で設定した変数に格納する
  'ここで指定するPL/SQLファイル名は、Case Sensitive

  'sqlstr = "begin :rtncd :=[PL/SQLファイル名] (:変数1,:変数2,………変数3);
  'sqlstr = sqlstr & " end;"
  'intRtn = mydbSQL(sqlstr) ←で、SQL文を飛ばす

sqlstr = " begin :rtncd := update_mtl_disb (:disb_no,:order_no,:item_no,:disb_qty,:disb_flg);"
sqlstr = sqlstr & " end;"
intRtn = mydbSQL(sqlstr)

update_mtl_disb = MyParaGet("rtncd") 'ファンクションに、パラメータを渡す

End Function


5. ストアドプロシージャ操作(2)
ストアドプロシージャを操作する(INSERT)

Function insert_mtl_disb()

Dim F As Form: Set F = frmmain
Dim intRtn As Integer

'ホスト変数のセット -mydbParaSetを使って、変数Aに、変数B(VBから)を渡す
  'mydbParaSet "変数A", 変数B

mydbParaSet "disb_no", Trim(gdisb_no)
mydbParaSet "order_no", Trim(gOrder_no)
mydbParaSet "item_no", Trim(gItem_no)
mydbParaSet "disb_qty", CLng(gdisb_Qty)
mydbParaSet "disb_flg", CInt(gdisb_flg)
mydbParaSet "rtncd", 0 '正常に動作した場合、0を返す

'受注テーブルのINSERT ここで、PL/SQLの設定
  'mydbParaSetで値を与えた変数を使い、PL/SQL内で設定した変数に格納する
  'ここで指定するPL/SQLファイル名は、Case Sensitive

  'sqlstr = "begin :rtncd :=[PL/SQLファイル名] (:変数1,:変数2,………変数3);
  'sqlstr = sqlstr & " end;"
  'intRtn = mydbSQL(sqlstr) ←で、SQL文を飛ばす

sqlstr = " begin :rtncd := insert_mtl_disb (:disb_no,:order_no,:item_no,:disb_qty,:disb_flg);"
sqlstr = sqlstr & " end;"
intRtn = mydbSQL(sqlstr)

insert_mtl_disb = MyParaGet("rtncd") 'ファンクションに、パラメータを渡す

End Function


BACK TO INDEX