Avatar billede dk_akj Nybegynder
14. august 2006 - 16:20 Der er 7 kommentarer og
1 løsning

SQL query - max 255 chars

Hej,

Jeg bruger nedenstående i en macro til at hente data fra en Oracle database. Problemmet opstår når min sql statement ikke kan være mere end 255 chars lang. Nogen der har en workaround ?

Excel 2002 (ver10)
OS: XP sp2

//akj

' database connection object
    Set conn = CreateObject("ADODB.Connection")
   
    ' servername (windows)
    ServerName = "<servername>"
   
    'oracle instance
    ServerDbName = "<oracle_sid>"
   
    'connectionstring
    AdoConStr = "dsn=FBDSN;uid=excel;pwd=12fgtr;connection=adConnectAsync;"
   
    'connect to database
    With conn
      .CursorLocation = 3
      .ConnectionString = AdoConStr
      .Open
    End With

    ' create recordset object
    Set rs = CreateObject("ADODB.Recordset")
   
    ' execute sql
    Set rs = conn.Execute(sql)
Avatar billede kjulius Novice
14. august 2006 - 18:03 #1
Hvad er det, der sætter den begrænsning. Det er hverken VBA eller ADO, er det?
Hvilken fejlmelding får du?
Avatar billede dk_akj Nybegynder
14. august 2006 - 19:55 #2
Får en sql fejl.
dim sql as string
Sql = "selecr blah, blahh.....  from..... where ... union select bøh, bæh ... from ... order by blahh"

Sådan en sqlstreng på +300 chars truncates til 255 chars, i debug locals window er sql også kun 255 chars sp det må være vba der sætter grænsen.

//akj
Avatar billede kjulius Novice
14. august 2006 - 21:11 #3
Nej, det kan ikke være VBA. I hjælpen til står:

String Data Type
     

There are two kinds of strings: variable-length and fixed-length strings.

* A variable-length string can contain up to approximately 2 billion (2^31) characters.
* A fixed-length string can contain 1 to approximately 64K (2^16) characters.

Det skulle vist være rigeligt til den sql streng. Det må være den måde du opbygger strengen. Gør du det virkeligt sådan som du viser det ved en simpel assignment, eller sker det ved en serie af delsammensætninger? Måske er det en af de funktioner du bruger...?

Du angiver, at du laver en dim først. Hvis du ikke havde gjort det, var en mulighed også, at du "arver" en variabel som er defineret til 255 tegn (dim sql as string * 255) fra modulniveau.

Hmm... Det er faktisk svært at "fjerndebugge" sådan et problem. Især uden den helt aktuelle kode at kigge på.
Avatar billede dk_akj Nybegynder
14. august 2006 - 21:21 #4
Havde ikke lige koden da jeg oprettede svarede 19.55 da det lå på arbejde, har lige hentet sql'en:

    Dim ls As string
    ls = "SELECT XAL_SUPERVISOR.SALESTRANS.SHIPMENTDATE, XAL_SUPERVISOR.SALESTRANS.SHIPMENT_NO, XAL_SUPERVISOR.SALESTABLE.SALESNUMBER, XAL_SUPERVISOR.DEBTABLE.NAME" & _
    " FROM XAL_SUPERVISOR.DEBTABLE DEBTABLE, XAL_SUPERVISOR.SALESTABLE SALESTABLE, XAL_SUPERVISOR.SALESTRANS SALESTRANS" & _
    " WHERE (XAL_SUPERVISOR.SALESTRANS.DATASET=XAL_SUPERVISOR.SALESTABLE.DATASET And XAL_SUPERVISOR.SALESTRANS.DATASET='ABC') AND (XAL_SUPERVISOR.SALESTABLE.DATASET=XAL_SUPERVISOR.DEBTABLE.DATASET) AND (XAL_SUPERVISOR.SALESTRANS.SALESNUMBER=XAL_SUPERVISOR.SALESTABLE.SALESNUMBER) AND (XAL_SUPERVISOR.SALESTABLE.DEBTORACCOUNT=XAL_SUPERVISOR.DEBTABLE.ACCOUNTNUMBER) AND ((XAL_SUPERVISOR.SALESTRANS.SHIPMENTDATE)>=sysdate-1)" & _
    " ORDER BY XAL_SUPERVISOR.SALESTRANS.SHIPMENTDATE"

//akj
Avatar billede kjulius Novice
14. august 2006 - 22:06 #5
Tja, jeg kan altså ikke genskabe fejlen. Eneste forskel er, at jeg bruger Excel 2003, hvor du bruger Excel 2002.

Måske er der andre, der kan give en god forklaring?
Avatar billede dk_akj Nybegynder
15. august 2006 - 10:12 #6
Hmm, efter en genstart af maskinen kører det....

I debugger kan man dog max se 255 chars men sql'en sendes korrekt over til Oracle serveren og der kommer de rette data tilbage.

Vil du lægge et svar ?

//akj
Avatar billede kjulius Novice
15. august 2006 - 10:22 #7
Gerne, men det er nu mærkeligt, at du ikke kan se hele strengen i debuggeren. Det kan jeg godt. Men som sagt, det er to forskellige udgaver af programmet vi bruger... Måske skulle du tjekke Windows Update / Office Update?
Avatar billede dk_akj Nybegynder
16. august 2006 - 10:33 #8
Min version er fuldt opdateret men den lille bug kan jeg godt leve med.
Jeg sætter bare en msgbox ind hvis len>255.

//akj
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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