Avatar billede up2nogood Nybegynder
07. februar 2007 - 12:03 Der er 4 kommentarer og
1 løsning

ODBC Read - hvad er best practice?

Halløj,

Jeg skal jævnligt have læst data ind fra en Access database.
C5 er version 4.0 SP1
Der er oprettet en DSN og C5 har fint adgang til Access'en.

I øjeblikket bruger jeg Read AS ODBC, men jeg så et sted, at denne metode havde memoryleak og der i stedet skulle bruges ODBCInfo. Men er dette stadig ikke rettet i C5 4.0?
Hvad er syntax for ODBCinfo hvis denne skal bruges?

Jeg har følgende fremgangsmåde, kan noget tweakes?

Har XAL der laver ODBCforbindelsen
Denne kalder en XAL med parm=odbcconn for at læse ordrer
Dernæst kaldes en anden XAL med parm=odbcconn for at læse linier
Herefter laves ODBCLogoff
Til sidst massefakturering

Jeg oplever til tider at når C5 lukkes efter ODBC funktionalitet er kørt igennem, gøres dette med en fejl. Hvad kan dette skyldes?
Avatar billede mariaf Juniormester
07. februar 2007 - 18:57 #1
Der ligger en hulens masse funktionalitet i skærmbillederne i C5, så alene af den grund må det frarådes direkte og kritikløst at smide data ind - du skal i hvert fald vide hvad du gør. En direkte overførsel mellem en accessdatabase og C5 er som skabt til problemer.

Hvad har du i databasen, som ikke bedre håndteres direkte i C5?
Avatar billede up2nogood Nybegynder
08. februar 2007 - 08:35 #2
Det er en shopløsning hvor ordrer oprettes og disse skal bogføres i C5.
Der læses blot Ordrer og Linier ind i C5, massefakturering bliver herefter kaldt.
Der startes med en testperiode hvor ordrerne ikke bliver faktureret før de er manuelt gennemgået. Kører dette aktiveres den direkte massefakturering...

Men mit spørgsmål gik mere på Read AS ODBC kontra ODBCInfo. Hvor slet er ReadAs frem for ODBCInfo, der vil ikke skulle hentes ordrer mere end 3-5 gange i hver C5 session.
Avatar billede up2nogood Nybegynder
09. februar 2007 - 08:56 #3
Jeg har nu kigget lidt på ODBCInfo (tak for hjælpen Broholm).
Det går også fint indtil jeg skal lukke forbindelsen igen.

Min kode ser således ud i en simpel form:

SET &HSTMT = ODBCParse(&HDBC, 'SELECT ProductNumber, ProductName FROM Products')

WHILE ODBCInfo(&HDBC,&HSTMT,#NEXTREC,0)

SET &Varenummer  = ODBCInfo(&HDBC,&HSTMT,#GETFIELD,1)
SET &Varenavn1    = ODBCInfo(&HDBC,&HSTMT,#GETFIELD,2)

PRINT &Varenummer
PRINT &Varenavn1

END

PRINT "HERTIL GÅR DET FINT" PAUSE

//Dette fejler grumt _hver_ gang!
SET ODBCInfo(&HDBC,&HSTMT,12,0)

SET &HDBC = ODBCLogoff(&HDBC)
Avatar billede Broholm Novice
12. februar 2007 - 13:16 #4
Et svar som aftalt :-)
Avatar billede up2nogood Nybegynder
16. februar 2007 - 21:42 #5
Broholm kunne via ovenstående kode fortælle at ODBCInfo(&conn,&statement,12,0) åbenbart fejler på 4.0 kernen. Derfor et accepteret svar til ham.. Takker for hjælpen :o)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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