API Programming in Visual Basic

The following is a sample API application (edaapp.bas) written in Visual Basic and is provided with a Visual Basic form file and a project file (edavb.frm and edaapp.vbp) to build a GUI-based test application similar to the GUI RDAAPP tool.


Top of page

Example: Visual Basic for EDAAPP

Attribute VB_Name = "edaapp"
'--------------------------------------------------------------------------------
'
' Copyright (c) 2004 Information Builders, Inc. All rights reserved.
'
' Name: edaapp.bas
' Description: iWay API function calls used by sample VB application.
' Release: 7.x
'
' edaapp.vbp - VB project file for VB sample
' edaapp.frm - GUI Form an Main Control for VB sample
' edaapp.bas - Actual VB sample program
' edaglob.bas - iWay API Header file for VB
'
'--------------------------------------------------------------------------------

Option Explicit

Global eid As Long
Global scb As eda_scb

Public Function fnEdaRpc(query As String) As Long

Dim lStatus As Long
Dim lRpcPos As Long
Dim sRpcName As String
Dim sRpcParm As String

lRpcPos = InStr(1, query, " ")
If lRpcPos > 0 Then
sRpcName = Left(query, lRpcPos)
sRpcParm = Trim(Mid$(query, lRpcPos))
Else
sRpcName = Trim(query)
sRpcParm = ""
End If

EDARPC scb, sRpcName, EDA_NULL_DELIM, sRpcParm, EDA_NULL_DELIM
If scb.status <> EDA_SUCCESS Then
fnEdaRpc = scb.status
Exit Function
End If

lStatus = fnEdaTest()
If lStatus = EDA_SUCCESS Then
lStatus = fnEdaFetch()
End If

fnEdaRpc = lStatus

End Function

Public Function fnEdaConn(userid As String, passwd As String, server As String) As Long

EDACONNECT eid, scb, userid, EDA_NULL_DELIM, passwd, EDA_NULL_DELIM, server, EDA_NULL_DELIM
fnEdaConn = scb.status

End Function

Public Function fnEdaXconn() As Long

EDAXCONNECT scb
fnEdaXconn = scb.status

End Function

Public Function fnEdaTest() As Long
Dim lWaiting As Long
Dim sMsgText As String * 134

frmEDAx.lblStatus.Caption = "Waiting... "
frmEDAx.lblStatus.Refresh

Do
EDATEST scb, lWaiting
If scb.status < EDA_SUCCESS Then
fnEdaTest = scb.status
Exit Do
End If
Loop While lWaiting <> 0

frmEDAx.lblScb.Caption = "SCB: Rows=" + Str(scb.count) + " Cols=" +
Str(scb.nbrcols) + " Size=" + Str(scb.a_size)
frmEDAx.lblScb.Refresh

If scb.msg_type <> 0 Then
sMsgText = Left(scb.msg_text, scb.msg_len)
frmEDAx.txtResults.Text = frmEDAx.txtResults.Text + _
"(" + scb.msg_org + Str(scb.msg_code) + ") " + sMsgText + vbNewLine
Do While scb.msg_pending <> 0
EDAACCEPT scb
sMsgText = Left(scb.msg_text, scb.msg_len)
frmEDAx.txtResults.Text = frmEDAx.txtResults.Text + _
"(" + scb.msg_org + Str(scb.msg_code) + ") " + sMsgText + vbNewLine
Loop
frmEDAx.txtResults.Text = frmEDAx.txtResults.Text + _
"-- End of Messages -- " + vbNewLine
End If

fnEdaTest = scb.status

End Function

Public Function fnEdaFetch() As Long

Dim tuple As String * 4096
Dim szTuple As String
Dim szTemp As String
Dim lRow As Long

If scb.a_size > 0 Then
frmEDAx.lblStatus.Caption = "Fetching Data..."
frmEDAx.lblStatus.Refresh

lRow = 0
Do While scb.status = EDA_SUCCESS
EDAFETCH scb, tuple, scb.a_size, EDA_ALPHANUM
If scb.status = EDA_END_OF_SET Then
frmEDAx.txtResults.Text = frmEDAx.txtResults.Text + _
"-- End of Set -- (" + Str(scb.count) + " Rows retrieved)"
EDAQUIT scb
Else
If scb.status < EDA_SUCCESS Then
frmEDAx.txtResults.Text = frmEDAx.txtResults.Text + _
"(" + Str(scb.status) + ") Error in Fetching Data"
Else
lRow = lRow + 1
frmEDAx.lblStatus.Caption = "Rows=" & Str(lRow)
frmEDAx.lblStatus.Refresh
szTuple = Left(tuple, scb.a_size)
frmEDAx.txtResults.SelStart = Len(frmEDAx.txtResults.Text)
frmEDAx.txtResults.SelText = szTuple + vbNewLine
frmEDAx.txtResults.Refresh
End If
End If
Loop
End If

fnEdaFetch = scb.status

End Function

Public Function fnEdaSql(query As String) As Long

Dim lStatus As Long

EDASQL scb, query, EDA_NULL_DELIM, 0, 0, "", 0, 1
If scb.status <> EDA_SUCCESS Then
fnEdaSql = scb.status
Exit Function
End If

lStatus = fnEdaTest()
If lStatus = EDA_SUCCESS Then
lStatus = fnEdaFetch()
End If

fnEdaSql = lStatus

End Function

Public Function fnEdaInit()

Dim lStatus As Long

EDAINIT eid, lStatus
If lStatus <> EDA_SUCCESS Then
MsgBox "ERROR in Init, Status=" & lStatus, vbExclamation
End
End If

lStatus = fnEdaSources()

End Function

Public Function fnEdaTerm()

Dim lStatus As Long
EDATERM eid, lStatus

End Function

Public Function fnBrowseTables() As Long
Dim lStatus As Long

EDABROWSE scb, EDABASE_TBL_TABLES, EDABASE_SEL_TABLES_ALL, 0&, EDABASE_SELECT
If scb.status <> EDA_SUCCESS Then
fnBrowseTables = scb.status
Exit Function
End If

lStatus = fnEdaTest()
If lStatus = EDA_SUCCESS Then
lStatus = fnEdaFetch()
End If

fnBrowseTables = lStatus

End Function

Public Function fnDescribe(sTable As String) As Long

Dim InfoArea As eda_info_area
Dim lColNumb As Long
Dim lStatus As Long
Dim szTuple As String

EDADESCRIBE scb, sTable, EDA_NULL_DELIM
If scb.status <> EDA_SUCCESS Then
fnDescribe = scb.status
Exit Function
End If

lStatus = fnEdaTest()
If lStatus = EDA_SUCCESS Then
For lColNumb = 1 To scb.nbrcols Step 1
EDAINFO scb, lColNumb, InfoArea
If scb.status <> EDA_SUCCESS Then
lStatus = scb.status
Exit For
End If
szTuple = Left(InfoArea.col_name, InfoArea.col_Length)
frmEDAx.txtResults.Text = frmEDAx.txtResults.Text + szTuple + " " +
Str$(InfoArea.type) + " " + Str$(InfoArea.length) + vbNewLine
frmEDAx.txtResults.Refresh
Next lColNumb
End If
frmEDAx.txtResults.Text = frmEDAx.txtResults.Text + "-- End of Columns -- " +
vbNewLine

fnDescribe = lStatus

End Function

Private Function fnEdaSources()

Dim selfscb As eda_scb

Dim SName As String * 8
Dim sServer As String * 512
Dim servers As Long
Dim selector As Long
Dim cmd As Long

servers = EDABASE_TBL_SERVERS
selector = EDABASE_SEL_SERVERS_ALL
cmd = EDABASE_SELECT

EDACONNECT eid, selfscb, "", -1, "", -1, "", -5
EDABROWSE selfscb, servers, selector, 0&, cmd
EDATEST selfscb, 0&
Do While selfscb.status = EDA_SUCCESS
EDANEXT selfscb
If selfscb.status = EDA_SUCCESS Then
EDAFIELD selfscb, 1, SName, 8, EDA_ALPHANUM
frmEDAx.cmbServers.AddItem SName
End If
Loop
EDAXCONNECT scb
fnEdaSources = 0

End Function

iWay Software