MDAC - Microsoft Data Access Components
1
ODBC – Open DataBase Connectivity ODBC – software API adatbáziskezeléshez. • • • •
Nyelvfüggetlen, Adatbázisfüggetlen Operációsrendszer-független Standard adathozzáférés • • • •
Alkalmazás Driver Manager Library DBDriver … DBDriver
SQL alapú Akár nem relációs adatbázisokhoz is, táblázatokhoz, XML állományokhoz 1992-től fejlesztik, a sokoldalú. OLE DB, JDBC, ADO.NET - újabbak, platformfüggőek.
Vezérlőpult/Felügyeleti eszközök/ ODBC adatforrások
OLEDB
•OLE DB - Microsoft API adatok elérésére
•COM alapú ODBC továbbfejlesztés •OLE DB absztrakciós szintekkel elkülönítve kezeli az alkalmazást és az adatokat • • • •
datasource, session, command rowsets.
•Az OLE DB-ben a program az adatfogyasztó (consumer) és az adatbázis a szolgáltató (provider). •A provider a COM interface lehetőségeit használva szolgáltat. 2
ADO – ActiveX Data Object (Microsoft) COM objektum adatforrások elérésére • • •
Az OLE DB / ODBC és a programnyelv között Adatbázisfüggetlen SQL-t használ
ADO több felsőszintű objektumot tartalmaz: • • • • • • • • •
Connection Object – az adatbázis kapcsolat. Recordset Object – adatbázisrekordok halmaza. Command Object – SQL parancs. Record Object – adathalmaz (rendszerint nem az adatbázisból). Stream Object – adatfolyam text file, web-oldal. Error Object – hibakezelés. Field Object – adatbázismező. Parameter Object – SQL paraméter. Property Object – az objektumok adatai.
ADO több felsőszintű objektumot tartalmaz: • • • • •
VBScript Visual Basic Delphi C++ Builder .NET, ADO.NET
3
ADO – ActiveX Data Object (Microsoft) Project Preferences / Microsoft ActiveX 2.0 Library MSADO20.TLB
A használat alaplépései 1. Connection objektum létrehozása az adatbázissal való kapcsolathoz • Connectionstring tulajdonság / tulajdonságok •
OpenSchema metódus
• •
Open metódus A Recordset objektum létrehozása az adatok tárolására • Megjelenítés (Binding) • A változások érvényesítése Tranzakciók kezelése A Connection zárása
• •
4
1. Connection ADO objektum 1. Létrehozás Dim cn As New ADODB.Connection
2. Tulajdonságok ConnectionTimeout - várakozás sec.-ben Mode - adModeUnknown – nem definiált (Default) adModeRead adModeWrite adModeReadWrite adModeShareDenyRead - más nem olvashat adModeShareDenyWrite - más nem írhat adModeShareExclusive - más nem nyithat adModeShareDenyNone - más nem nyithat semmilyen joggal. Cursor Location - adUseNone – - adUseClient – (Microsoft Client Cursor Provider) - adUseServer - Default. Provider - driver név ODBC-hez, vagy OLEDB-hez ConnectionString 5
1. Connection / ConnectionString ConnectionString
- „kategória1=adat; kategória1=adat;…”
Access - OLEDB "Provider=Microsoft.Jet.OLEDB.4.0 ;User ID=;Data Source=D:\Oktatás\DB\VB\Auto.mdb; "
http://www.connectionstrings.com Access ODBC - Standard védelem "Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb;Uid=Admin;Pwd=; " Access ODBC - jelszóval "Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb;Exclusive=1; Uid=admin;Pwd=; „ SQL ODBC - Standard védelem: "Driver={SQLServer};Server=Your_Server_Name;Database=Your_Database_Name; Uid=Your_Username;Pwd=Your_Password;" SQL ODBC - jelszóval: "Driver={SQLServer};Server=Your_Server_Name;Database=Your_Database_Name; Trusted_Connection=yes;" SQL OLE DB- Standard védelem: "Provider=SQLOLEDB;Data Source=Your_Server_Name; Initial Catalog= Your_Database_Name;UserId=Your_Username;Password=Your_Password;" SQL OLE DB- jelszóval: "Provider=SQLOLEDB;Data Source=Your_Server_Name; 6 Initial Catalog=Your_Database_Name;Integrated Security=SSPI;"
1. Connection / Metódusok • connection.Open [ConnectionString, UserID, Password, Options] • Set recordset = connection.OpenSchema (QueryType [, Criteria]) QueryType adSchemaTables
adSchemaViews adSchemaPrimaryKeys
Criteria - TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE - TABLE_CATALOG TABLE_SCHEMA TABLE_NAME - PK_TABLE_CATALOG PK_TABLE_SCHEMA PK_TABLE_NAME
7
1. Connection / Metódusok Dim cn As New ADODB.Connection Dim sch As ADODB.Recordset cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; _ User ID=; _ Data Source="+App.Path+ " \Auto.mdb;" cn.Open Set sch = cn.OpenSchema(adSchemaTables) Do Until sch.EOF Séma.AddItem sch!TABLE_NAME + " (" + sch!TABLE_TYPE + ")" sch.MoveNext Loop
8
1. Connection / Metódusok • Set recordset = Connection.Execute(parancsstr, [recs, opc]) Csak olvasható hozzáférés, csak előre kurzor • parancsstr • recs • Opc Konstans adCmdText adCmdTable adCmdTableDirect adCmdStoredProc adExecuteAsync
- SQL utasítás, vagy táblanév, vagy tárolt eljárás. - Long változó a rekordok száma vissza - a parancsstr –t értelmező Long Leírás a parancsstr SQL parancsot tartalmaz az ADO generál SELECT * FROM from parancsstr táblából a provider SELECT * FROM from parancsstr táblából. a provider tárolt eljárása fut aszinkron parancs
• connection.Open [Conn.Str, UserID, Password, OpenOptions] Megnyitja a kapcsolatot • • • •
Conn.Str UserID Password OpenOptions
- a connectionstring - adConnectAsync eset;n aszinkron kapcsolat
• connection.Close • Lezárja a kapcsolatot 9
2. Recordset objektum Egy adott tábla adott rekordjainak halmaza, amelyek közül egyszerre egyetlen érhető el.
• recordset.Open parancsobj, kapcs, kurzor, zárás, opciók • Parancsobj • Kapcs
- Command objektum .CommandText - a rekorset-töltő parancs .ActiveConnection - az akt. kapcsolat - ha nincs a Command-ban – connection objektum vagy connection string
• kurzor adOpenForward adOpenKeyset
• zárás
adOpenDynamic adOpenStaticStatic adLockReadOnly adLockPessimistic adLockOptimistic adLockBatchOptimistic
• opciók adCmdText adCmdTable adCmdTableDirect adCmdStoredProc adExecuteAsync
Default. Csak előre mozoghat Mint a dinamikus, mások hozzáadásai, törlései nem látszanak. Mások hozzáadásai, törlései is látszanak. Statikus adathalmaz (Default) Read-only A változáskor rögtön módosul a DB Csak Update esetén módosul a DB. Csak Update esetén módosul a DB. a parancsstr SQL parancsot tartalmaz az ADO generál SELECT * FROM from parancsstr a provider SELECT * FROM from parancsstr a provider tárolt eljárása fut aszinkron parancs 10
2. Recordset objektum
Tulajdonságok / Metódusok
.RecordCount - a rekordok száma .AbsolutePosition - írható olvasható Long a rekordpozíció (1- RecordCount) .Bookmark - írható olvasható Variant a pozíció megjegyzésére .CursorLocation - adUseClient – kliensoldali adUseServer – Default .BOF, .EOF - logikai eleje, vége jelölő .Fields() - a mezők gyűjtemény .Count - az elemek száma .Name - a mező neve .Value - a mező értéke .Item(index) - az index-edik elem .Append Name, Type[, Size, Attrib] - Name – string - Type – enum - adEmpty - Size – Long - Attrib – enum - adFldDefault .Delete Field .MoveFirst, .MoveNext, Move n - mozgat .Delete - rekord törlés .AddNew - rekord hozzáadása .Mezőnév – az adat az aktuális rekordban .Update – az aktuális rekord kiírása .UpdateBatch – az összes függő kiírása.
11
2. Recordset objektum Dim i As Integer, j As Integer, s As String RC.Visible = False Label1.Caption = "Rekordok száma: “ : Label2.Caption = "" Mezők.Clear : Értékek.Clear On Error Resume Next rs.Close On Error GoTo ki sch.MoveFirst sch.Move Séma.ListIndex Set Qy.ActiveConnection = cn Qy.CommandText = "SELECT * FROM " + sch!TABLE_NAME rs.CursorLocation = adUseClient rs.Open Qy, , adOpenDynamic, adLockBatchOptimistic Label1.Caption = "Rekordok száma: " + CStr(rs.RecordCount) RC.Max = rs.RecordCount - 1 RC_Change For i = 0 To rs.Fields.Count - 1 Mezők.AddItem rs.Fields(i).Name Next i rs.MoveFirst Do Until rs.EOF s = "" For j = 0 To rs.Fields.Count - 1 s = s + CStr(rs.Fields(j).Value) + ";" Next j Értékek.AddItem s rs.MoveNext Loop RC.Visible = True
12
2. Adatkomponensek Microsoft DataGrid Components / Microsoft DataGrid Control 6.0 (OLEDB) VSFLEX3.OCX .DataSource - a recordset Set DataGrid1.DataSource = rs DataGrid1.Refresh
.AllowAddNew
DataControl Binding Project Preferences / Microsoft DataBinding Collection MSBind.DLL Text Dim BindColl As New BindingCollection BindColl.DataSource=recordset BindColl.Add Textvezérlő, ”Text”, ”Mezőnév” Set Nepesseg.DataSource = rs Nepesseg.Add Text1, "Text", "Név" 13
2. Adatkomponensek DataList Components / Microsoft DataList Control 6.0 (OLEDB) Set DataList1.RowSource = rs DataList1.BoundColumn = "Név " DataList1.ListField = "Név"
' a forrás recordset ' a forrás kötött mező ' a forrás megjelenő mező
Rem Set DataList1.DataSource = rs ' a cél recordset Rem DataList1.DataField = "DestBoundField„ ‘cél kötött mező .
3. Tranzakciók Connection.BeginTrans Connection.CommitTrans Connection.RollbackTrans
14