Welcome to Sign in | Help
in Search

SQL SERVER+ADP

Last post 11-30-2007, 7:47 PM by B_gd_n[ ]Sahlean. 9 replies.
Sort Posts: Previous Next
  •  11-29-2007, 1:56 PM 3504

    SQL SERVER+ADP

    Stiu ca sunt putin off topic dar ma risc... 

    Incerc sa mut o aplicatie facuta in access pe sql server, legandu-ma printr-un proiect de tip ADP folosind obiecte ADO.
    Problema este la legarea unui subform la o forma parinte, tabelele asociate fiind in aceeasi relatie, de parinte-copii.
    Am incercat 2 metode:
    1.stabilind la fiecare forma proprietatea recordsource la tabela respectiva, apoi creind cate un obiect de tip recordset pentru manipularea datelor, de felul:
    set RS1=me.recordset
    set RS2=me.recordset
    Cred eu ca form-ul si subform-ul sunt legate bine, deoarece pot naviga si fiecarei inregistrari din tabela parinte afisandu-mi inregistrarile corespunzatoare.
    In tabela copil exista campuri care au aceeasi valoare pentru un set de inregistrari, dorind astfel sa fac o automatizare
    private command1_click()
    do while not rs2.eof
      rs2("camp1")=text1
      rs2("camp2")=text2
    loop
    end sub
    Problema este ca sunt mereu actualizate doar inregistrarile din tabela copil aferente doar primei inregistrari din tabela parinte, deci probabil ca obiectele recordset nu sunt legate cum trebuie!
    Cam care ar putea fi problema?
    2. Am folosit un sir de tip SHAPE de tip:
    SHAPE {select * from tabela_parinte} append ({select * from tabela_copil} as RS2 relate camp1 to camp2)
    dupa asocierea formelor la obiectele recordset create, ele sunt corelate, dar in subform, mereu imi apar absolut toate inregistrarile,desi indicatorul de inregistrare se 'misca' doar in dreptul inregistrarilor aferente celei parinte!
    Va multumesc!

  •  11-29-2007, 3:16 PM 3507 in reply to 3504

    Re: SQL SERVER+ADP

    Nu inteleg un lucru: de ce nu ai apelat la solutia clasica de creare a formularelor cu subformulare:

    1. creezi formularul parinte pe baza unei tabele (setezi proprietatea RecordSource la tabela parinte; ex. frmFactura),

    2. creezi subformularul ca un formular de sine statator (setezi proprietatea RecordSource la tabela copil; ex. frmProdusFacturat),

    3. inchizi formularul copil frmProdusFacturat si deschizi in modul de vizualizare "Design" formularul parinte frmFactura

    4. prin drag and drop inserezi formularul copil frmProdusFacturat in formularul parinte frmFactura.

    In mod normal Access-ul va stabili automat corespondenta dintre formularul parinte si formularul copil. Daca nu poti defini chiar tu aceasta corespondenta folosind proprietatile Link Master Fields si Link Child Fields.

  •  11-29-2007, 3:46 PM 3508 in reply to 3507

    Re: SQL SERVER+ADP

    Da, chiar metoda clasica am aplicat-o in cazul 1. Form+subform

    Si merge, pot naviga prin inregistrari, mi le arata conform relatiei dintre tabele, numai ca pentru o manipulare mai buna a datelor, am nevoie sa folosesc obiecte recordset legate la seturile de inregistrari din spatele form-urilor si se pare ca nu mai merge bine treaba!

    Eu exact la fel am lucrat cu DAO si mi-a mers!

    dupa ce execut pasii pe care i-ai descris si tu mai devreme, in evenimentul Load al fiecarei forme(form+subform) asociez in felul urmator

    set rs1=me.recordset

  •  11-29-2007, 4:18 PM 3509 in reply to 3508

    Re: SQL SERVER+ADP

    xeon:

    Da, chiar metoda clasica am aplicat-o in cazul 1. Form+subform

    Si merge, pot naviga prin inregistrari, mi le arata conform relatiei dintre tabele, numai ca pentru o manipulare mai buna a datelor, am nevoie sa folosesc obiecte recordset legate la seturile de inregistrari din spatele form-urilor si se pare ca nu mai merge bine treaba!

    Eu exact la fel am lucrat cu DAO si mi-a mers!

    dupa ce execut pasii pe care i-ai descris si tu mai devreme, in evenimentul Load al fiecarei forme(form+subform) asociez in felul urmator

    set rs1=me.recordset

    Daca doresti o anumita optimizare (in sensul ca NU doresti ca Access-ul sa incarce in formularul principal toate inregistrarile din tabela parinte) poti defini un filtru (ServerFilter) la formularul parinte (echibalentul clauzei WHERE din SQL).

    VBA:

    Private Sub Form_Load()
        Me.ServerFilter = "IdUtilizator=1"
        Me.ServerFilterByForm = True
    End Sub

     

  •  11-29-2007, 5:23 PM 3510 in reply to 3509

    Re: SQL SERVER+ADP

    Cred ca nu sunt nici eu prea clar: folosind metoda clasica pe care mi-ai aratat-o si tu, e super ok, in forma principala am butoane de derulare, deruland imi arata inregistrarea curenta iar in subform inregistrarile din tabela copil aferente celei parinte.

    Presupunem 2 tabele: tabela cursuri si tabela studenti. Daca pentru cursul informatica care este inregistrarea 3 am avut 5 studenti, iar toti au luat nota 10, nu vreau sa scriu in dreptul fiecarui student nota 10, merg la inregistrarea numarul 3 si in subform folosesc o casuta de text cam asa:

    Renunt la obiecte recordset desi era mai elegant si folosesc asa intr-un buton de pe subform:

    me.recordset.movefirst

    do while not me.recordset.eof

    me.recordset("nota")=casutatext

    me.recordset.updatebatch

    me.recordset.movenext

    loop 

    Numai ca nu se actualizeaza inregistrarile copil aferente inregistrarii parinte numarul 3, ci se updateaza mereu numai inregistrarile aferente primei inregistrari din baza mama.

    In acelasi mod am facut form-urile folosind DAO si cu access dar nu mergea. Ceva imi scapa undeva si ca de obicei, e ceva foarte simplu...

    Imi pare rau, am dorit sa fiu cat mai concis si cred ca nu am fost foarte clar.

    Merci oricum pentru interes!

  •  11-29-2007, 5:34 PM 3511 in reply to 3510

    Re: SQL SERVER+ADP

    As vrea sa mai fac o remarca: in subform, pun un buton si-i zic asa:

    sub button1_click()

    'este vorba deci de subform

    msgbox me.recordset.recordcount

    end sub

    Si navigand prin form-ul principal, indiferent in ce inregistrare as fi, mi-arata 4 adica cate inregistrati din subform sunt aferente primei inregistrari din formul principal. Chiar daca form-urile sunt legate bine si-mi arata exact conform relatiei.

  •  11-29-2007, 6:49 PM 3512 in reply to 3511

    Re: SQL SERVER+ADP

    xeon:

    As vrea sa mai fac o remarca: in subform, pun un buton si-i zic asa:

    sub button1_click()

    'este vorba deci de subform

    msgbox me.recordset.recordcount

    end sub

    Si navigand prin form-ul principal, indiferent in ce inregistrare as fi, mi-arata 4 adica cate inregistrati din subform sunt aferente primei inregistrari din formul principal. Chiar daca form-urile sunt legate bine si-mi arata exact conform relatiei.

    Scrie in subformular  urmatoarea procedura eveniment atasata butonului de comanda cmdSalveazaNota:

     

    Private Sub cmdSalveazaNota_Click()

        Me.Recordset.MoveFirst

        While Not Me.Recordset.EOF

            Me.Recordset!Nota = txtNota.Value

            Me.Recordset.MoveNext

        Wend

    End Sub

     

  •  11-29-2007, 9:59 PM 3513 in reply to 3511

    Re: SQL SERVER+ADP

    xeon:

    As vrea sa mai fac o remarca: in subform, pun un buton si-i zic asa:

    sub button1_click()

    'este vorba deci de subform

    msgbox me.recordset.recordcount

    end sub

    Si navigand prin form-ul principal, indiferent in ce inregistrare as fi, mi-arata 4 adica cate inregistrati din subform sunt aferente primei inregistrari din formul principal. Chiar daca form-urile sunt legate bine si-mi arata exact conform relatiei.

    Abia acuma am observat a doua problema.

    O posibila solutie este utilizarea functiei agregate Count. La fel de bine se poate utiliza si functia DCount.

     

  •  11-30-2007, 3:41 PM 3522 in reply to 3513

    Re: SQL SERVER+ADP

    Salut,

    Faza cu 'recordcount' ma interesa sa vad daca numarul de inregistrari din tabela copii aferenta fiecarei inregistrari mama corespunde cu numarul de inregistrari afisate de subform. Si nu este si nu inteleg de ce! Imi afiseaza corect prima oara dupa ce deschid forma si dau click, dupa care imi pastreaza acelasi numar!

    Am sters tot codul, am lasat accessul sa faca legaturile de la form la subform, e ceva ce mi se intampla numai la proiect adp, nu si la mdb.

    Nu-mi dau seama, e posibil sa fie de la drivere!

  •  11-30-2007, 7:47 PM 3525 in reply to 3522

    Re: SQL SERVER+ADP

    Incearca

        If Not (Me.Recordset.BOF = True And Me.Recordset.EOF = True) Then
            Me.Recordset.MoveLast
        End If
       
        MsgBox Me.Recordset.RecordCount

    si instaleaza ultimele SP-uri. 

    Inca ceva: 

    [1] ce versiune de Access folosesti ?

    [2] ce versiunea de SQL Server utilizezi ?

    [3] verifica daca ai instalate ultimele versiuni pentru MDAC  [1] , [2] / furnizorul de date OLE-DB pentru SQL Server (SQL Server OLE-DB provider)

     

    Citeste "Using ADO in Microsoft Access 2002

    SQL Server 2005 ? 

View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems