Avatar billede sbay Nybegynder
03. juli 2003 - 10:01 Der er 2 kommentarer og
1 løsning

Brug af function ved arbejde med odbc kald

Hej

Jeg har en temmelig omfattende kode, der henter og sætter ind fra/i en databasefil på en AS/400. Jeg har derfor splittet koden op i mindre Functions til hver enkelt opgave, men hvordan for jeg en af disse functions til at kunne sætte ind i databasen og hente data??? Da alt med query's lå i en function fungerede det fint, men skal man overføre parametre til fuctionerne - og hvilke????

Function ConnectToHost(Key As String) As Integer
   
    'Disconnect if already connected.
    If Key <> "" Then
        Call Result.Close(DB_CLOSE)
        Call Connection.Disconnect
    End If
    'Set objects.
    Set Connection = New ODBCConnection
    Set Query = New ODBCQuery
    Set Result = New ODBCResultSet
    Set Query.Connection = Connection
    Set Result.Query = Query
    '********************************************************************
Call ECH()

og så::::::

Function ECH
    '****************************************
    '* To the ECH-file
    '****************************************
    If Not doc Is Nothing Then
        Print "||| Ivoice Item" + Doc.InvoiceItemLines(0)
        EHCUST =Cint(Doc.CompanyNumber(0))
        EHWHSE =a+"DO"+a   
        EHCPO =a+Left(Doc.rekvno(0), 15)+a
        EHDTYP =a+Doc.InvoiceOrderType(0)+a       
        EOCLS =108
        If Doc.MachineBPCSNo(0) = "" Then
            EHSAL = 140
        Else
            EHSAL = Clng(Doc.MachineBPCSNo(0))
        End If
        If project <> "" Then
            EHSALTMP = Doc.ProjectNo(0)
            EHSAL2 = Clng(2 + Right$(EHSALTMP,4))
        Else
            EHSAL2 = Clng(Doc.EmplNumb(0))
        End If
        CRTDAT = Doc.Created
        CRTDAT =a+ Format(CRTDAT, "dd-mm-yyyy")+a
        GUID = a+""+a
        NYGUID =a+""+a
        ORD = 0
        STATUS = 0
        ASSNOTYP = a+ Fulltrim(Doc.AssignmentNumber(0))+Doc.InvoiceOrderType(0)+a
        '************************************
        '* SQL for ECH
        Query.SQL = "INSERT INTO EDSERVICE.EDECH values("& ASSNOTYP &", "& EHCUST &", "& EHWHSE &", "& EHCPO &", "& EHDTYP &", "& EOCLS &", "& EHSAL &", "& EHSAL2 &", "& CRTDAT &", "& GUID &", "& NYGUID &", "& ORD &", "& STATUS &")"
        Print Query.SQL
        Call Result.Execute
          '****************************************
    End If
   
End Function
Avatar billede roenving Novice
03. juli 2003 - 17:24 #1
Kan du ikke bare:
call ECH(Result)

så har du alle dine connections osv. med ...

-- desværre ikke noget jeg har pillet ved i lang tid ,-)
Avatar billede jogii Nybegynder
03. juli 2003 - 19:49 #2
problemet er nok at Query og Result ikke er kendt (initialiseret) for functionen ECH.
Du kan erklære dem i Globals sectionen, så kan de ses i alle subfunktioner.
Jeg vil også råde dig til at bruge "Option Declare" statementet. Det gør at der kræves erklæringer for alle variable, og så ville denne type fejl blive fanget.

Men det bedste du kan gøre er at omkode det hele til en klasse. Min vurdering er at funktioner kodet som klasser er meget robustere og nemmere at flytte til andre applikationer.
//Jörg
Avatar billede roenving Novice
03. juli 2003 - 19:52 #3
-- et rigtig godt svar Jörg

-- og det kan betale sig at sætte sig ind i at arbejde lidt objekt-orienteret !-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester