Avatar billede sbay Nybegynder
17. marts 2003 - 12:03 Der er 27 kommentarer og
1 løsning

SQL INSERT INTO

Hejsa

Jeg prøver forgæves at indsætte data i en AS/400 tabel.

Jeg kan godt hvis jeg sætter data direkte i sqlstrengen, men ikke hvis jeg vil bruge nogle forudbestemte variabler!

PERIOD = "00" ' FAST
    ART = "8" ' FAST
    FIRMA = "56" ' FAST
    LNR = 10500
    LART = 2010
    KONST = "*" ' FAST
    SATS = ""
    ATIMER = 25
    NUMRE = ""
    AKK = ""
    SUPTXT = ""
    ANTAL = 0
    TILB = ""
    LNR2 = ""
    FILLER = ""

Query.SQL = "INSERT INTO EDSERVICE.FORMA22B values (PERIOD, ART, FIRMA, LNR, LART, KONST, SATS, ATIMER, NUMRE, AKK, SUPTXT, ANTAL, TILB, LNR2, FILLER)"

Nogle forslag til hvad der er galt?????
Avatar billede jogii Nybegynder
17. marts 2003 - 12:12 #1
Prøv at erstatte enkelte variable med konstkanter. Men hvor programmerer du koden? I LotusScript?
Så vær opmærksom på at din SQL-sætning er en streng. Du skal måske kode noget i stil med:

Query.SQL = "INSERT INTO EDSERVICE.FORMA22B values (" & Period & ", " & Art  & ", " & .... )"

//Jörg
Avatar billede sbay Nybegynder
17. marts 2003 - 12:27 #2
Ja, det er Lotus Script. Det virker ok med konstanter direkte i strengen. Men det der med " & PERIOD & " synes ikke at virke. Så bliver den bare tom!!!
Avatar billede jogii Nybegynder
17. marts 2003 - 12:49 #3
Men SQL-objektet kender jo ikke LotusScript variablene PERIOD ART FIRMA ... etc. Det er din opgave at omforme variablene til en tekststreng som SQL-objektet kan arbejde videre på.

Det som objektet får overført er tekststrengen "PERIOD, ART, FIRMA ... "
men den burde få overført

{INSERT INTO EDSERVICE.FORMA22B values ("00", "8", "56", 10500, 2010, "*",  ....)}

for at bygge denne streng op skal du oversætte LS-variablene til tekststrenge og kombinere disse til ovenstående ASCII-streng.

Query.SQL = {INSERT INTO EDSERVICE.FORMA22B values ("}& Period & {", "} & Art  & {", "} & Firma & {", } & LNR & {, } & LART & {, "} & KONST & {", "} &  {... )}

Som du kan se er det et farligt fedten rundt med ", " {]  :-)
Du kan evt. vælge at tilføje anførselstegn i selve variabeltildelingen:


    a = Chr$(34);

    PERIOD = a + "00"+a ' FAST
    ART = a+"8"+a ' FAST
    FIRMA = a+"56"+a ' FAST
    LNR = 10500
    LART = 2010
    KONST = a+"*"+a ' FAST
    SATS = a+""+a
    ATIMER = 25
    NUMRE = a+""+a
    AKK = a+""+a
    SUPTXT = a+""+a
    ANTAL = 0
    TILB = a+""+a
    LNR2 = a+""+a
    FILLER = a+""+a

Prøv evt. også at:
    Dim SQLstring as string
    SQLstring = INSERT INTO EDSERVICE.FORMA22B values ("}& Period & {", "} & Art  & {", "} & Firma & {", } & LNR & {, } & LART & {, "} & KONST & {", "} &  {... )}
    Print SQLstring
    Query.SQL = SQLstring

Så er du sikker på at du afleverer det samme til SQL-objektet som du tror du gør.

//Jörg
Avatar billede sbay Nybegynder
17. marts 2003 - 12:58 #4
det er bare mystisk, at hvis jeg sætter variablen i samme funktion som sql-strengen kører, virker det fint nok. Men de væredier der er angivet i en anden subrutine ikke ikke!?!?!
Avatar billede jogii Nybegynder
17. marts 2003 - 13:02 #5
Prøv at vise kode der virker og noget der ikke virker.

Nu er det jo sådan at varible erklæret i en routine normalt ikke kan ses i en anden routine. Hvis de skal ses et andet sted skal de erklæres "globalt" og ikke lokalt. Flyt deres DIM fra den lokale routine til "Globals" sectionen i LS.
//Jörg
Avatar billede sbay Nybegynder
17. marts 2003 - 13:11 #6
Jeg er lige ved at flytte dem som du skriver... går lige lidt - skal lige ahve styr på det her! ;-)
Avatar billede sbay Nybegynder
17. marts 2003 - 13:39 #7
Sådan her ser det ud i konsollen:

INSERT INTO EDSERVICE.FORMA22B values ("00", "8", "56", 10500, 2010, "*", "sats", 25,"numre", "akk", "suptxt", 0, "til" , "l2", "filler")
Avatar billede hsg Nybegynder
17. marts 2003 - 14:00 #8
Et gæt: prøv at udskifte " med '
INSERT INTO EDSERVICE.FORMA22B values ('00', osv
Avatar billede jogii Nybegynder
17. marts 2003 - 14:01 #9
Det ser jo umiddelbart fint ud. Det er jo en herlig streng fyldt med "konstaner" som SQL-serveren kan forstå.

Men skal "sats" "numre" osv. overføres som sådan? eller skulle de have været blanke?
Avatar billede sbay Nybegynder
17. marts 2003 - 14:10 #10
Der skal ikke stå sats i, sandsynligvis skal de være blanke - i hvert fald oftest!

Men jeg får en fejl 720: ODBC could not complete the requested operation.

Hvis jeg gør det med konstanter tastet direkte ind i strengen virker det fint! Jeg tror lige jeg skal have tjekket min AS400 tabel....
Avatar billede jogii Nybegynder
17. marts 2003 - 14:23 #11
Prøv at vise den SQL-sætning der virker.
Avatar billede sbay Nybegynder
17. marts 2003 - 14:32 #12
Query.SQL = "INSERT INTO EDSERVICE.FORMA22B values ('P3', 'A', 'FI', 2, 3, '*', 'SATS', 4, 'NUMRE', 'AKK', 'SUPTXT', 5, 'TIL', 'LNR2', 'filler')"
Avatar billede sbay Nybegynder
17. marts 2003 - 14:47 #13
Det her virker ikke engang:

    a = Chr$(34)
   
    PERIOD = a+"PE"+a ' FAST
Query.SQL = "INSERT INTO EDSERVICE.FORMA22B (PERIOD) values ("& PERIOD &")"

SQL i konsol =  INSERT INTO EDSERVICE.FORMA22B (PERIOD) values ("PE")
Avatar billede hsg Nybegynder
17. marts 2003 - 14:49 #14
Er det en DB2/400 du er oppe imod ??
Avatar billede jogii Nybegynder
17. marts 2003 - 14:49 #15
Jamen så har HSQ jo ret i at du skal udskifte " med '.
Arstat
    a = Chr$(34)
med
    a = {'}
Avatar billede jogii Nybegynder
17. marts 2003 - 14:52 #16
Det er ret forskellig hvad de forskellige SQL-varianter kan fortolke. Oracle, Sybase, MS SQL, DB2 har ofte forskellige måder at fortolke SQL-sætninger på.
Avatar billede sbay Nybegynder
17. marts 2003 - 14:58 #17
Jep - det er en DB2/400
Avatar billede hsg Nybegynder
17. marts 2003 - 15:01 #18
Jamen..som jogii så siger: Brug '
Det er nu det som DB2 gerne vil have.
Avatar billede sbay Nybegynder
17. marts 2003 - 15:10 #19
a= {'}
   
PERIOD = a+"00"+a ' FAST
Query.SQL = "INSERT INTO EDSERVICE.FORMA22B (PERIOD) values (" & PERIOD &")"

Konsol = INSERT INTO EDSERVICE.FORMA22B (PERIOD) values ('00') 

Lige lidt hjælper det!!!
Avatar billede jogii Nybegynder
17. marts 2003 - 15:15 #20

    Query.SQL = "INSERT INTO EDSERVICE.FORMA22B (PERIOD) values ('00')"

virker, mens

    a = {'}
    PERIOD = a+"00"+a
    Query.SQL = "INSERT INTO EDSERVICE.FORMA22B (PERIOD) values (" & PERIOD &")"

ikke virker?
Avatar billede hsg Nybegynder
17. marts 2003 - 15:17 #21
Stadig en 720: ODBC could not complete the requested operation ??
Avatar billede sbay Nybegynder
17. marts 2003 - 15:17 #22
Det er rigtigt forstået ;-)
Avatar billede jogii Nybegynder
17. marts 2003 - 15:33 #23
Det kan være der sniger sig skjulte tegn eller lignende ind. Kan du køre denne eksakte kode og fortælle om resultatet.

    Dim a as string
    dim PERIOD as string
    Dim sqlstring as string

    a = {'}
    PERIOD = a+"00"+a
    sqlstring = "INSERT INTO EDSERVICE.FORMA22B (PERIOD) values (" & PERIOD &")"
    print len(sqlstring)
    Query.SQL = sqlstring
    ' Dette virker ikke?
    sqlstring = "INSERT INTO EDSERVICE.FORMA22B (PERIOD) values ('00')"
    print len(sqlstring)
    Query.SQL = sqlstring
    ' Men dette gør ?
Avatar billede sbay Nybegynder
17. marts 2003 - 15:41 #24
HAHAHAHA - det er lidt sjovt - NOT. Jeg tror det er tabellen der ikke kan tage det samme input i første kolonne (altså det skal være unikt). Men i følge min AS400 mand er der ikke sat noget op på tabellen, der gør at den skal være unik!
Avatar billede hsg Nybegynder
17. marts 2003 - 15:45 #25
Det unique kan jo forklare at det første statement virker og det andet ikke gør. Du kunne jo tage jogii's kode og så sikre dig, at der ikke er duplicate values i det du prøver at lave insert med.
Nu du alligevel snakker med en AS/400 mand, kan han så se om der rapporteres
noget i DB2's log ? eller andre steder på jeres 400 ?
Avatar billede sbay Nybegynder
17. marts 2003 - 16:04 #26
Nå kigger lige på det i morgen tidligt - løber efter bussen.......
Avatar billede jogii Nybegynder
19. marts 2003 - 15:54 #27
Hej sbay, hvad blev resultatet?
Avatar billede sbay Nybegynder
19. marts 2003 - 17:21 #28
Det virker nu - Det var UNIQUE der var det sidste problem - mange tak for hjælpen ;-)
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