SQL HiA
Kap 12
Dynamisk SQL
SQL HiA
SQL HiA
Flerbrukersystem Client / Server
DatabaseDBMSDBMS
Application_2Application_2
SQL-Request
Data
Application_3Application_3
Application_1Application_1
Client Server
SQL HiA
Resultatsett
DatabaseDBMSDBMS
ApplicationApplication
SQL-Request
Data
SELECT SNr, Navn, PNr
FROM Selger
WHERE PNr = 6400
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Tabellen Selger
SNr Navn PNr
2 Olsen 6400
4 Berg 6400
Resultatsett
Client Server
Fetch
RowID
FetchThrough
SQL HiA
RowID
RowID SNr Navn PNr
CAAD 5 Nilsen 5002
BACV 2 Olsen 6400
ERCB 1 Hansen 9000
EADD 4 Berg 6400
Selger (ID = SNr)
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
Et eksempel på en 3NF-tabell Selger
med tre kolonner
SNr, Navn og PNr
RowID er en ekstra kolonne i hver tabell
som alltid kommer i tillegg til de kolonnene
vi eksplisitt definerer.
RowID er entydig for hver rad
og fungerer som en slags identifikator.
SQL HiA
SQL HiA
Statisk SQL
SNrID Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
SNrID
Navn
PNr
Select
SELECT SNrID, Navn, PNr
FROM Selger
Set sSelect = ‘SELECT SNrID, Navn, PNr INTO :dfnSNrID, :dfsNavn, dfnPNr
FROM Selger’
Call SqlPrepare ( hSql, sSelect )
Call SqlExecute ( hSql )
Call SqlFetchNext ( hSql, nFetch )
SQL HiA
Statisk SQL
SNrID
Navn
PNr
Select
SELECT SNrID, Navn, PNr
FROM Selger
SNrID
Navn
PNr
2
Select
SELECT Navn, PNr
FROM Selger
WHERE SNrID = :dfnSNrID
SNrID
Navn
PNr 6400
Select
SELECT SNrID, Navn
FROM Selger
WHERE PNr = :dfnPNr
SNrID
Navn
PNr
Nilsen
Select
SELECT SNrID, PNr
FROM Selger
WHERE Navn = :dfsNavn
SNrID
Navn
PNr
Nilsen
6400
Select
SELECT Navn, PNr
FROM Selger
WHERE Navn = :dfsNavn
AND PNr = : dfnPNr
SNrID
Navn
PNr
%sen
6400
Select
SELECT SNrID, Navn
FROM Selger
WHERE Navn LIKE ‘ || ‘’’ ||
dfsNavn || ‘’’
AND PNr = :dfnPNr
SQL HiA
Fra Statisk SQL til Dynamisk SQL
SNrID
Navn
PNr 6400
Select
SELECT SNrID, Navn, PNr
FROM Selger
WHERE PNr = :dfnPNr
Set sSelect = ‘SELECT SNrID, Navn, PNr INTO :dfnSNrID, :dfsNavn, dfnPNr
FROM Selger
WHERE PNr = :dfnPNr’
Set sSelect = ‘SELECT ‘ || sColumn || ‘ INTO ‘ || sInto ||
‘ FROM ‘ || sFrom
‘ WHERE ‘ || sWhere
frmSelger
sColumn = ‘SNrID, Navn, PNr’
sInto = ‘ :dfnSNrID, :dfsNavn, :dfnPNr’
sFrom = ‘Selger’
sWhere = ‘PNr = :dfnPNr’
SQL HiA
Dynamisk SQL - Initier SQL-variable
SNrID
Navn
PNr 6400
Select
frmSelger
dfnSNrID
dfsNavn
dfnPNr
pbSelect
pbSelect
On SAM_Click
Call SalSendMsg ( hWndForm, PAM_SELECT, 0, 0 )
frmSelger
Message Actions
On PAM_SELECT
Set sColumn = ‘‘
Set sInto = ‘‘
Set sFrom = ‘‘
Set sWhere = ‘‘
Call SalSendMsg ( hWndForm, PAM_SQL, 0, 0 )
Call SalSendMsgToChildren ( hWndForm, PAM_SQL, 0, 0 )
1
2
SQL HiA
Dynamisk SQL - Bestem tabell-navn
SNrID
Navn
PNr 6400
Select
frmSelger
dfnSNrID
dfsNavn
dfnPNr
pbSelect
frmSelger
Message Actions
On PAM_SELECT
Set sColumn = ‘‘
Set sInto = ‘‘
Set sFrom = ‘’
Set sWhere = ‘‘
Call SalSendMsgTo ( hWndForm, PAM_SQL, 0, 0 )
Call SalSendMsgToChildren ( hWndForm, PAM_SQL, 0, 0 )
...
On PAM_SQL
Call SalGetWindowText ( hWndForm, sWName, 20 )
sFrom = SalStrRight ( sWName, SalStrLength(sWName) - 3 )
sWName = ‘frmSelger’
sFrom = ‘Selger’
SQL HiA
Dynamisk SQL - Bestem SQL-variable for dfnSNrID
SNrID
Navn
PNr 6400
Select
frmSelger
dfnSNrID
dfsNavn
dfnPNr
pbSelect
frmSelger
Message Actions
On PAM_SELECT
Set sColumn = ‘‘
Set sInto = ‘‘
Set sFrom = ‘’
Set sWhere = ‘‘
Call SalSendMsgTo ( hWndForm, PAM_SQL, 0, 0 )
Call SalSendMsgToChildren ( hWndForm, PAM_SQL, 0, 0 )
...
sColumn = ‘ SNrID ’
sInto = ‘ :dfnSNrID ’
SQL HiA
Dynamisk SQL - Bestem SQL-variable for dfsNavn
SNrID
Navn
PNr 6400
Select
frmSelger
dfnSNrID
dfsNavn
dfnPNr
pbSelect
frmSelger
Message Actions
On PAM_SELECT
Set sColumn = ‘‘
Set sInto = ‘‘
Set sFrom = ‘’
Set sWhere = ‘‘
Call SalSendMsgTo ( hWndForm, PAM_SQL, 0, 0 )
Call SalSendMsgToChildren ( hWndForm, PAM_SQL, 0, 0 )
...
sColumn = sColumn || ‘, ‘ || ‘ Navn ’
= ‘ SNrID, Navn ‘
sInto = sInto || ‘ :dfsNavn ’
= ‘ :dfnSNrID, :dfsNavn ‘
SQL HiA
Dynamisk SQL - Bestem SQL-variable for dfnPNr
SNrID
Navn
PNr 6400
Select
frmSelger
dfnSNrID
dfsNavn
dfnPNr
pbSelect
frmSelger
Message Actions
On PAM_SELECT
Set sColumn = ‘‘
Set sInto = ‘‘
Set sFrom = ‘’
Set sWhere = ‘‘
Call SalSendMsgTo ( hWndForm, PAM_SQL, 0, 0 )
Call SalSendMsgToChildren ( hWndForm, PAM_SQL, 0, 0 )
...
sColumn = sColumn || ‘, ‘ || ‘ PNr ’
= ‘ SNrID, Navn, PNr ‘
sInto = sInto || ‘ :dfnPNr ’
= ‘ :dfnSNrID, :dfsNavn, :dfnPNr ‘
sWhere = sWhere || ‘ PNr = ‘ || ‘ :dfnPNr ‘
= ‘ PNr = :dfnPNr ‘
= ‘ PNr = 6400 ‘
SQL HiA
Dynamisk SQL - Bestem SELECT-statement sSelect
SNrID
Navn
PNr 6400
Select
frmSelger
dfnSNrID
dfsNavn
dfnPNr
pbSelect
frmSelger
Message Actions
On PAM_SELECT
...
Call SalSendMsgToChildren ( hWndForm, PAM_SQL, 0, 0 )
Set sSelect = ‘SELECT ‘ || sColumn || ‘ INTO ‘ || sInto
‘ FROM ‘ || sFrom
‘ WHERE ‘ || sWhere
...
sColumn = sColumn || ‘, ‘ || ‘ PNr ’
= ‘ SNrID, Navn, PNr ‘
sInto = sInto || ‘ :dfnPNr ’
= ‘ :dfnSNrID, :dfsNavn, :dfnPNr ‘
sWhere = sWhere || ‘ PNr = ‘ || ‘ :dfnPNr ‘
= ‘ PNr = :dfnPNr ‘
= ‘ PNr = 6400 ‘
sSelect = SELECT SNrID, Navn, PNr INTO :dfnSNrID, :dfsNavn, :dfnPNr
FROM Selger
WHERE PNr = 6400
SQL HiA
SQL HiA
Generering av dynamisk SQL-statement
PAM_SELECT
PAM_UPDATE
...
SQL Build
SQL Build
PAM_SELECT
PAM_UPDATE
...
1
2
3
clsWndclsWnd Class Variables: sSql, sColumn, sInto, sTable, sWhere, sOrder, ...
Mdi
Frm
SQL HiA
SQL HiA
Klasser (1)
clsSqlHandleStruct
clsSqlHandleStruct
clsSqlDbAccess
clsSqlDbAccess
clsWnd
clsWnd
clsWnd_Mdi
clsWnd_Mdi
clsWnd_TopLevel
clsWnd_TopLevel
clsMdi
clsMdi
clsFrm
clsFrm
clsTbl
clsTbl
clsWnd_ChildObject
clsWnd_ChildObject
clsWnd_DfCmbMiCol
clsWnd_DfCmbMiCol
clsDf
clsDf
clsDfRowID
clsDfRowID
clsDfNum
clsDfNum
clsDfStr
clsDfStr
clsCmb
clsCmb
clsCmbNum
clsCmbNum
clsCmbStr
clsCmbStr
clsCol
clsCol
clsCmbNum_AutoSelect
clsCmbNum_AutoSelect
clsCmbStr_AutoSelect
clsCmbStr_AutoSelect
clsColRowID
clsColRowID
clsColNum
clsColNum
clsColStr
clsColStr
clsMl
clsMl
SQL HiA
Klasser (2)
clsPb
clsPb
clsPbMdiSelect
clsPbMdiSelect
clsPbMdiFirst
clsPbMdiFirst
clsPbMdiSelect
clsPbMdiSelect
clsPbMdiPrevious
clsPbMdiPrevious
clsPbMdiNext
clsPbMdiNext
clsPbMdiLast
clsPbMdiLast
clsPbMdiUpdate
clsPbMdiUpdate
clsPbMdiSave
clsPbMdiSave
clsPbMdiInsert
clsPbMdiInsert
clsPbMdiDelete
clsPbMdiDelete
clsPbMdiNewRow
clsPbMdiNewRow
clsPbMdiSort
clsPbMdiSort
clsPbMdiHelp
clsPbMdiHelp
clsPbMdiPrint
clsPbMdiPrint
clsPbMdiClear
clsPbMdiClear
SQL HiA
Klasse-notasjon
ClassName
Class Variables
Instance Variables
Functions
Messages
SQL HiA
SQL HiA
clsSqlHandleStruct
iv_hSql
bhSqlStatus
iv_hSql
bhSqlStatus
clsSqlHandleStruct
Instance Variable SqlHandle
True if iv_hSql is connected
SQL HiA
clsSqlDbAccess
sSqlDatabase
sSqlUser
sSqlPassword
cv_hSql[1:*]
nConnected
nMinHandles
nMaxHandles
sSqlStatement
sSqlStatement_Select
sSqlDatabase
sSqlUser
sSqlPassword
cv_hSql[1:*]
nConnected
nMinHandles
nMaxHandles
sSqlStatement
sSqlStatement_Select
nResultSetCount
nFetchRowNumber
nResultSetCount
nFetchRowNumber
InitClass
ConnectSqlHandles
DisconnectAllSqlHandles
SetSqlStatement
SetIsolationLevel
SetParameter
Prepare
Execute
ExecuteSelect
FetchRow
FetchRow_Through
First
Previous
Next
Last
Select
Update
Insert
Delete
RetrieveRow
Error
MessageBoxFetchError
Select_Inst
Update_Inst
Insert_Inst
Delete_Inst
InitClass
ConnectSqlHandles
DisconnectAllSqlHandles
SetSqlStatement
SetIsolationLevel
SetParameter
Prepare
Execute
ExecuteSelect
FetchRow
FetchRow_Through
First
Previous
Next
Last
Select
Update
Insert
Delete
RetrieveRow
Error
MessageBoxFetchError
Select_Inst
Update_Inst
Insert_Inst
Delete_Inst
clsSqlDbAccess Initierer sSqlDatabase, sSqlUser, sSqlPassword
Connect nMin SqlHandles
Henter en rad på nytt etter UPDATE
SQL HiA
clsWnd
sMdiName
sTopWndName
sSql
sColumn
sInto
sTable
sWhere
sOrder
sOrderColumn
sUpdateSet
sInsertInto
sInsertValue
sDeleteValue
sUpdates[1:*]
hWndColSort
bExists
sTableArray[1:*]
nTableArrayCont
sFrom
sConstraints
sMdiName
sTopWndName
sSql
sColumn
sInto
sTable
sWhere
sOrder
sOrderColumn
sUpdateSet
sInsertInto
sInsertValue
sDeleteValue
sUpdates[1:*]
hWndColSort
bExists
sTableArray[1:*]
nTableArrayCont
sFrom
sConstraints
sItemName
sDbTableName
sDbColumnName
sDbTableColumnName
sItemName
sDbTableName
sDbColumnName
sDbTableColumnName
SetItemName
SetDbTableName
Set_TbName_ColName
Set_TableArray
Set_From_Constraints
SetItemName
SetDbTableName
Set_TbName_ColName
Set_TableArray
Set_From_Constraints
SAM_CreateSAM_Create
clsWnd
Set the name of an object (frmMain, dfs_Adr_PNr)
dfs_Adr_PNr --> Adr
dfs_Adr_PNr --> PNr
Set the Array-values of different Tables in a SqlStatement
Set the FROM Clause and the Constraint part of a
SELECT SqlStatement
Call SetItemName( )
SQL HiA
clsWnd_Mdi / clsWnd_TopLevel
SAM_CreateSAM_Create
clsWnd_Mdi
SetTopWndName
Get_SqlHandle
SQL_Build
SQL_Select
SQL_Insert
SQL_Update
SQL_Delete
Clear
Help_TopWindow
SetTopWndName
Get_SqlHandle
SQL_Build
SQL_Select
SQL_Insert
SQL_Update
SQL_Delete
Clear
Help_TopWindow
SAM_Create
PAM_SELECT
PAM_UPDATE
PAM_INSERT
PAM_DELETE
PAM_CLEAR
PAM_HELP
SAM_Close
SAM_Create
PAM_SELECT
PAM_UPDATE
PAM_INSERT
PAM_DELETE
PAM_CLEAR
PAM_HELP
SAM_Close
clsWnd_TopLevel
SQL HiA
clsMdi / clsFrm / clsTbl
hSqlDbhSqlDb
clsMdi
hSqlSelect
hSqlUpdate
hSqlInsert
hSqlDelete
hSql
nFetch
hSqlSelect
hSqlUpdate
hSqlInsert
hSqlDelete
hSql
nFetch
Set_SqlHandle
Get_SqlHandle
Select_Inst
Update_Inst
Insert_Inst
Delete_Inst
Clear
Set_SqlHandle
Get_SqlHandle
Select_Inst
Update_Inst
Insert_Inst
Delete_Inst
Clear
SAM_Create
PAM_FIRST
PAM_PREVIOUS
PAM_NEXT
PAM_LAST
SAM_Create
PAM_FIRST
PAM_PREVIOUS
PAM_NEXT
PAM_LAST
clsFrm
hSqlTblhSqlTbl
Get_SqlHandle
Select_Inst
Update_Inst
Insert_Inst
Delete_Inst
SQL_SelectSort
Clear
Get_SqlHandle
Select_Inst
Update_Inst
Insert_Inst
Delete_Inst
SQL_SelectSort
Clear
SAM_Create
PAM_SORT
PAM_NEWROW
SAM_Create
PAM_SORT
PAM_NEWROW
clsTbl
SQL HiA
clsWnd_ChildObject / clsWnd_DfCmbMiCol
sParentNamesParentName
clsWnd_ChildObject
sItemValuesItemValue
Sql
Sql_Select
Sql_Update
Sql_Insert
Get_Equal
Get_MyValue
Sql
Sql_Select
Sql_Update
Sql_Insert
Get_Equal
Get_MyValue
SAM_Create
PAM_SQL
PAM_CLEAR
SAM_Create
PAM_SQL
PAM_CLEAR
clsWnd_DfCmbMiCol
SQL HiA
clsDf
sParentNamesParentName
Get_MyValueGet_MyValue
clsDf
Sql
Sql_Select
Sql_Update
Sql_Delete
Sql
Sql_Select
Sql_Update
Sql_Delete
PAM_ROWIDPAM_ROWID
clsDfRowID
sSelectsSelect
Get_EqualGet_Equal
clsDfNum
sItemValuesItemValue
Get_EqualGet_Equal
clsDfStr
SQL HiA
clsCmb
DropDown
Click
Get_MyValue
DropDown
Click
Get_MyValue
SAM_DropDown
SAM_Click
SAM_DropDown
SAM_Click
clsCmb
Get_EqualGet_Equal
clsCmbNum
Get_EqualGet_Equal
clsCmbStr
DropDown
Click
DropDown
Click
SAM_ClickSAM_Click
clsCmbNum_AutoSelect
DropDown
Click
DropDown
Click
SAM_ClickSAM_Click
clsCmbNum_AutoSelect
SQL HiA
clsCol
SAM_ClickSAM_Click
clsCol
Sql
Sql_Select
Sql_Update
Sql_Delete
Sql
Sql_Select
Sql_Update
Sql_Delete
clsColRowID clsColNum clsColStr
SQL HiA
clsMultiline
SetDbColumnNameSetDbColumnName
clsMultiline
SQL HiA
MdiWindow / FormWindow / TableWindow
clsSqlDbAccess: hSqlDbclsSqlDbAccess: hSqlDb
clsSqlDbAccess
clsSqlDbAccess
clsWnd_TopLevel
clsWnd_TopLevel
clsMdi
clsWnd_Mdi
clsWnd_Mdi
clsFrm
clsFrm
clsTbl
clsTbl
SQL HiA
Bruk av virtuelle funksjons-kall
f1f1
f1f1 f1f1
f1f1 f1f1 f1f1 f1f1
Call SalSendMsg(Obj1, Msg1…)
On Msg1
Call ..f1(…)
SQL HiA
Navn-setting
frmSelger
cmb_Selger_SNrID
ComboBox Tabell-Navn Kolonne-navn
dfs_Selger_RowIDSkjult RowID
SQL HiA
UPDATE
clsFrm
Update
Call Execute (hSqlUpdate)
Call SqlSetParameter ( hSqlSelect, DBP_FETCHTHROUGH, TRUE, ‘‘)
Call FetchRow_Through ( hSqlSelect, nFetchRowNumber, nInd)
Call SqlSetParameter ( hSqlSelect, DBP_FETCHTHROUGH, FALSE, ‘‘)
UPDATE Selger
SET Navn = :cmb_Selger_Navn, PNr = :cmb_Selger_PNr
WHERE ROWID = :dfs_Selger_RowID
SQL HiA
End

K12

Editor's Notes

  • #2 SQL er standard databasespråk for relasjons-databaser.