37
SQL HiA Kap 12 Dynamisk SQL

Kap 12

  • Upload
    jalen

  • View
    53

  • Download
    0

Embed Size (px)

DESCRIPTION

Kap 12. Dynamisk SQL. FlerbrukersystemClient / Server. Client. Server. Database. DBMS. Application_1. SQL-Request. Data. Application_2. Application_3. Resultatsett. Client. Server. Database. DBMS. SQL-Request. Data. Tabellen Selger. Application. SNrNavnPNr - PowerPoint PPT Presentation

Citation preview

Page 1: Kap 12

SQL HiA

Kap 12

Dynamisk SQL

Page 2: Kap 12

SQL HiA

Page 3: Kap 12

SQL HiA

Flerbrukersystem Client / Server

DatabaseDBMS

Application_2

SQL-Request

Data

Application_3

Application_1

Client Server

Page 4: Kap 12

SQL HiA

Resultatsett

DatabaseDBMS

Application

SQL-Request

Data

SELECT SNr, Navn, PNrFROM SelgerWHERE PNr = 6400

SNr Navn PNr

5 Nilsen 50022 Olsen 64001 Hansen 90004 Berg 6400

Tabellen Selger

SNr Navn PNr

2 Olsen 64004 Berg 6400

Resultatsett

Client Server

Fetch

RowID

FetchThrough

Page 5: Kap 12

SQL HiA

RowID

RowID SNr Navn PNr

CAAD 5 Nilsen 5002BACV 2 Olsen 6400ERCB 1 Hansen 9000EADD 4 Berg 6400

Selger (ID = SNr)

SNr Navn PNr

5 Nilsen 50022 Olsen 64001 Hansen 90004 Berg 6400

Selger (ID = SNr)

Et eksempel på en 3NF-tabell Selgermed tre kolonnerSNr, Navn og PNr RowID er en ekstra kolonne i hver tabell

som alltid kommer i tillegg til de kolonnenevi eksplisitt definerer.RowID er entydig for hver radog fungerer som en slags identifikator.

Page 6: Kap 12

SQL HiA

Page 7: Kap 12

SQL HiA

Statisk SQL

SNrID Navn PNr

5 Nilsen 50022 Olsen 64001 Hansen 90004 Berg 6400

Selger (ID = SNr)

SNrID

Navn

PNr

Select

SELECT SNrID, Navn, PNrFROM Selger

Set sSelect = ‘SELECT SNrID, Navn, PNr INTO :dfnSNrID, :dfsNavn, dfnPNrFROM Selger’

Call SqlPrepare ( hSql, sSelect )Call SqlExecute ( hSql )Call SqlFetchNext ( hSql, nFetch )

Page 8: Kap 12

SQL HiA

Statisk SQL

SNrID

Navn

PNr

Select

SELECT SNrID, Navn, PNrFROM Selger

SNrID

Navn

PNr

2

Select

SELECT Navn, PNrFROM SelgerWHERE SNrID = :dfnSNrID

SNrID

Navn

PNr 6400

Select

SELECT SNrID, NavnFROM SelgerWHERE PNr = :dfnPNr

SNrID

Navn

PNrNilsen

Select

SELECT SNrID, PNrFROM SelgerWHERE Navn = :dfsNavn

SNrID

Navn

PNrNilsen

6400

Select

SELECT Navn, PNrFROM SelgerWHERE Navn = :dfsNavn

AND PNr = : dfnPNr

SNrID

Navn

PNr%sen

6400

Select

SELECT SNrID, NavnFROM SelgerWHERE Navn LIKE ‘ || ‘\’’ ||

dfsNavn || ‘\’’AND PNr = :dfnPNr

Page 9: Kap 12

SQL HiA

Fra Statisk SQL til Dynamisk SQL

SNrID

Navn

PNr 6400

Select

SELECT SNrID, Navn, PNrFROM SelgerWHERE PNr = :dfnPNr

Set sSelect = ‘SELECT SNrID, Navn, PNr INTO :dfnSNrID, :dfsNavn, dfnPNrFROM SelgerWHERE 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’

Page 10: Kap 12

SQL HiA

Dynamisk SQL - Initier SQL-variable

SNrID

Navn

PNr 6400

Select

frmSelger

dfnSNrID

dfsNavn

dfnPNr

pbSelect

pbSelectOn SAM_Click

Call SalSendMsg ( hWndForm, PAM_SELECT, 0, 0 )

frmSelgerMessage Actions

On PAM_SELECTSet sColumn = ‘‘Set sInto = ‘‘Set sFrom = ‘‘Set sWhere = ‘‘Call SalSendMsg ( hWndForm, PAM_SQL, 0, 0 )Call SalSendMsgToChildren ( hWndForm, PAM_SQL, 0, 0 )

1

2

Page 11: Kap 12

SQL HiA

Dynamisk SQL - Bestem tabell-navn

SNrID

Navn

PNr 6400

Select

frmSelger

dfnSNrID

dfsNavn

dfnPNr

pbSelect

frmSelgerMessage Actions

On PAM_SELECTSet sColumn = ‘‘Set sInto = ‘‘Set sFrom = ‘’Set sWhere = ‘‘Call SalSendMsgTo ( hWndForm, PAM_SQL, 0, 0 )Call SalSendMsgToChildren ( hWndForm, PAM_SQL, 0, 0 )...

On PAM_SQLCall SalGetWindowText ( hWndForm, sWName, 20 )sFrom = SalStrRight ( sWName, SalStrLength(sWName) - 3 )

sWName = ‘frmSelger’

sFrom = ‘Selger’

Page 12: Kap 12

SQL HiA

Dynamisk SQL - Bestem SQL-variable for dfnSNrID

SNrID

Navn

PNr 6400

Select

frmSelger

dfnSNrID

dfsNavn

dfnPNr

pbSelect

frmSelgerMessage Actions

On PAM_SELECTSet 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 ’

Page 13: Kap 12

SQL HiA

Dynamisk SQL - Bestem SQL-variable for dfsNavn

SNrID

Navn

PNr 6400

Select

frmSelger

dfnSNrID

dfsNavn

dfnPNr

pbSelect

frmSelgerMessage Actions

On PAM_SELECTSet 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 ‘

Page 14: Kap 12

SQL HiA

Dynamisk SQL - Bestem SQL-variable for dfnPNr

SNrID

Navn

PNr 6400

Select

frmSelger

dfnSNrID

dfsNavn

dfnPNr

pbSelect

frmSelgerMessage Actions

On PAM_SELECTSet 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 ‘

Page 15: Kap 12

SQL HiA

Dynamisk SQL - Bestem SELECT-statement sSelect

SNrID

Navn

PNr 6400

Select

frmSelger

dfnSNrID

dfsNavn

dfnPNr

pbSelect

frmSelgerMessage 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, :dfnPNrFROM SelgerWHERE PNr = 6400

Page 16: Kap 12

SQL HiA

Page 17: Kap 12

SQL HiA

Generering av dynamisk SQL-statement

PAM_SELECTPAM_UPDATE...

SQL BuildSQL Build

PAM_SELECTPAM_UPDATE...

12

3

clsWnd Class Variables: sSql, sColumn, sInto, sTable, sWhere, sOrder, ...

Mdi

Frm

Page 18: Kap 12

SQL HiA

Page 19: Kap 12

SQL HiA

Klasser (1)

clsSqlHandleStruct clsSqlDbAccess clsWnd

clsWnd_Mdi clsWnd_TopLevel

clsMdi clsFrm clsTbl

clsWnd_ChildObject

clsWnd_DfCmbMiCol

clsDf

clsDfRowID clsDfNum clsDfStr

clsCmb

clsCmbNum clsCmbStr

clsCol

clsCmbNum_AutoSelect clsCmbStr_AutoSelect

clsColRowID clsColNum clsColStr

clsMl

Page 20: Kap 12

SQL HiA

Klasser (2)

clsPb

clsPbMdiSelect clsPbMdiFirstclsPbMdiSelect clsPbMdiPrevious clsPbMdiNext clsPbMdiLast

clsPbMdiUpdate clsPbMdiSaveclsPbMdiInsert clsPbMdiDelete

clsPbMdiNewRowclsPbMdiSort

clsPbMdiHelpclsPbMdiPrint clsPbMdiClear

Page 21: Kap 12

SQL HiA

Klasse-notasjon

ClassName

Class Variables

Instance Variables

Functions

Messages

Page 22: Kap 12

SQL HiA

Page 23: Kap 12

SQL HiA

clsSqlHandleStruct

iv_hSqlbhSqlStatus

clsSqlHandleStruct

Instance Variable SqlHandle

True if iv_hSql is connected

Page 24: Kap 12

SQL HiA

clsSqlDbAccess

sSqlDatabasesSqlUser

sSqlPasswordcv_hSql[1:*]nConnected

nMinHandlesnMaxHandlessSqlStatement

sSqlStatement_Select

nResultSetCountnFetchRowNumber

InitClassConnectSqlHandles

DisconnectAllSqlHandlesSetSqlStatementSetIsolationLevel

SetParameterPrepareExecute

ExecuteSelectFetchRow

FetchRow_ThroughFirst

PreviousNextLast

SelectUpdateInsertDelete

RetrieveRowError

MessageBoxFetchErrorSelect_Inst

Update_InstInsert_InstDelete_Inst

clsSqlDbAccess Initierer sSqlDatabase, sSqlUser, sSqlPassword

Connect nMin SqlHandles

Henter en rad på nytt etter UPDATE

Page 25: Kap 12

SQL HiA

clsWnd

sMdiNamesTopWndName

sSqlsColumn

sIntosTablesWheresOrder

sOrderColumnsUpdateSetsInsertInto

sInsertValuesDeleteValuesUpdates[1:*]hWndColSort

bExistssTableArray[1:*]nTableArrayCont

sFromsConstraints

sItemNamesDbTableName

sDbColumnNamesDbTableColumnName

SetItemNameSetDbTableName

Set_TbName_ColNameSet_TableArray

Set_From_Constraints

SAM_Create

clsWnd

Set the name of an object (frmMain, dfs_Adr_PNr)dfs_Adr_PNr --> Adrdfs_Adr_PNr --> PNrSet the Array-values of different Tables in a SqlStatementSet the FROM Clause and the Constraint part of aSELECT SqlStatement

Call SetItemName( )

Page 26: Kap 12

SQL HiA

clsWnd_Mdi / clsWnd_TopLevel

SAM_Create

clsWnd_Mdi

SetTopWndNameGet_SqlHandle

SQL_BuildSQL_SelectSQL_Insert

SQL_UpdateSQL_Delete

ClearHelp_TopWindow

SAM_CreatePAM_SELECTPAM_UPDATEPAM_INSERTPAM_DELETEPAM_CLEARPAM_HELPSAM_Close

clsWnd_TopLevel

Page 27: Kap 12

SQL HiA

clsMdi / clsFrm / clsTbl

hSqlDb

clsMdi

hSqlSelecthSqlUpdatehSqlInserthSqlDelete

hSqlnFetch

Set_SqlHandleGet_SqlHandle

Select_InstUpdate_InstInsert_InstDelete_Inst

Clear

SAM_CreatePAM_FIRST

PAM_PREVIOUSPAM_NEXTPAM_LAST

clsFrm

hSqlTbl

Get_SqlHandleSelect_Inst

Update_InstInsert_InstDelete_Inst

SQL_SelectSortClear

SAM_CreatePAM_SORT

PAM_NEWROW

clsTbl

Page 28: Kap 12

SQL HiA

clsWnd_ChildObject / clsWnd_DfCmbMiCol

sParentName

clsWnd_ChildObject

sItemValue

SqlSql_Select

Sql_UpdateSql_InsertGet_Equal

Get_MyValue

SAM_CreatePAM_SQL

PAM_CLEAR

clsWnd_DfCmbMiCol

Page 29: Kap 12

SQL HiA

clsDf

sParentName

Get_MyValue

clsDf

SqlSql_Select

Sql_UpdateSql_Delete

PAM_ROWID

clsDfRowID

sSelect

Get_Equal

clsDfNum

sItemValue

Get_Equal

clsDfStr

Page 30: Kap 12

SQL HiA

clsCmb

DropDownClick

Get_MyValue

SAM_DropDownSAM_Click

clsCmb

Get_Equal

clsCmbNum

Get_Equal

clsCmbStr

DropDownClick

SAM_Click

clsCmbNum_AutoSelect

DropDownClick

SAM_Click

clsCmbNum_AutoSelect

Page 31: Kap 12

SQL HiA

clsCol

SAM_Click

clsCol

SqlSql_Select

Sql_UpdateSql_Delete

clsColRowID clsColNum clsColStr

Page 32: Kap 12

SQL HiA

clsMultiline

SetDbColumnName

clsMultiline

Page 33: Kap 12

SQL HiA

MdiWindow / FormWindow / TableWindow

clsSqlDbAccess: hSqlDb

clsSqlDbAccess

clsWnd_TopLevel

clsMdi

clsWnd_Mdi

clsFrm clsTbl

Page 34: Kap 12

SQL HiA

Bruk av virtuelle funksjons-kall

f1

f1 f1

f1 f1 f1 f1

Call SalSendMsg(Obj1, Msg1…)

On Msg1 Call ..f1(…)

Page 35: Kap 12

SQL HiA

Navn-setting

frmSelger

cmb_Selger_SNrID

ComboBox Tabell-Navn Kolonne-navn

dfs_Selger_RowIDSkjult RowID

Page 36: Kap 12

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

Page 37: Kap 12

SQL HiA

End