Baze de date
Protocolul DDEProtocolul DDEDDE (Dynamic Data Exchange) este un protocol de schimb dinamic de date intre doua aplicatii Windows, una denumita Clineti sau Destinatie, cealalta denumita Server sau Sursa. Legatura este intrerupta daca una dintre cele doua aplicatii este inchisa. O legatura DDE cuprinde 3 faze principale: - initierea: aplicatia destinatie cauta aplicatia sursa si stabileste un canal (legatura) de comunicare, - conversie: datele sunt schimbate prin acest canal, - inchidere: canalul de comunicare este inchis. INITIEREA Functia DDEInitiate permite initierea conversatiei intre doua aplicatii, returnand numarul de canal daca comunicarea a fost stabilita. Daca aceasta nu s-a intamplat, are loc o eroare. Sintaxa: DDEInitiate(<application>,<subject>)
Exemplu: `creaza o legatura DDE cu foaia Excel canal = DDEInitiate(„Excel”,”Foaie”) LEGATURA → DDE Functia DDE permite stabilirea unei conversatii DDE cu o alta aplicatie, de la care se cere informatii pentru a fi afisate intr-un control al unui formular sau raport. Sintaxa: DDE (<Application>, <Rubrica>, <Element>)
=DDE (“Excel”, “Mapa1”, “L1C1”) → DDESend Functia DDESend permite stabilirea unei conversatii DDE cu o alta aplicatie si trimiterea unui element de informatie acestei aplicatii dintr-un control situat intr-un formular sau raport. Sintaxa: DDESend (<Application>, <Rubrica>, <Element>, <Date>
=DDESend(„Excel”,”Mapa1”, „L1C1”, [oras]) → DDEPoke Instructiunea DDEPoke trimite informatii aplicatiei Sursa print-un canal deschis.
Sintaxa: DdePoke <Numarul de canal>, <Element>, <Date>
DDEPoke canal, ”L1C1”, „15” → DDERequest Functia DDERequest cere informatii aplicatiei Sursa. Sintaxa: DDERequest ( <Numar canal>, <Element>)
Suma = DDEReqest (canal, „L1C1”) → DDEExecute Instructiunea DDEExecute returneaza un sir de comenzi unei alte aplicatii in curs de executie Sintaxa: DDEExecute (<Numar de canal>, <Comanda>)
DDEExecute Canal,”[New(1)]” INCHIDEREA → DDETerminate Instructiunea DDETerminate inchide un canal de comunicare DDE. Sintaxa: DDETerminate <Numar de canal>
Exemplu: DDETerminate canal → DDETerminateAll Aceasta instructiune inchide toate canalele de comunicare DDE. Sintaxa: DDETerminateAll EXEMPLU GLOBAL Arata cum se afiseaza continutul unui tabel Access in Excel.
Private Sub TransferXLS_Clienti( ) `Variabilele Access Object Dim dbs As DAO.Database Dim rstClient As DAO.RecordSet Dim fld As DAO.Field `Variabile pentru utilizarea DDE Dim Canal As Variant Dim intLig As Integer Dim intColas Integer Dim strPozitie As String `Variabile Excel Dim strExcel as String Dim blnRes As Boolean On Error resume Next Set dbs = CurrentDb Set rstClient = dbs.OpenRecordSet(„Clienti”, dbOpenTable) `Deschiderea unui canal DDE cu Excel canal = DDEInitiate(„Excel”, „Foaie”) `In caz de eroare se lanseaza aplicatia Excel If Err Then Err = 0 `Cauta aplicatia Excel With Application.FileSearch .NewSearch .LookIn = „C:” .SearchSubFolders = True .FileName = „Excel.exe” .FileType = „*.exe” If .Execute( ) > 0 Then strExcel = .FoundFiles(1) End If `Lansarea Excel blnRes = Shell(strExcel, vbNormalFocus) If Not blnRes Then MsgBox (”Aplicatia Excel nu a fost gasita”, _ vbExclamation) Exit Sub End If Canal = DDEInitiate(„Excel”, „Foaie”) End If `Activarea ferestrei Excel intLin = 1 intCol =1 `Antetul coloanelor continand numele campurilor For Each fld In rstClient.Fields strPositon = „L” & intLin & „C” & ”intCol DDEPoke Canal, strPosition, rstClient.Fields _ (IntCol -1).Name intCol = intCol + 1 Next fld `Parcurgerea inregistrarilor de transferat Do While Not rstClient.EOF intLin = intLin + 1 intCol =1 For Each fld In rstClient.Fields strPosition = „L” & intLin & „C” & intCol DDEPoke Canal, strPozitia, rstClient(intCol – 1) intCol = intCol + 1 Next fld rstClient.MoveNext Loop EndSub
|