Avatar billede tma Juniormester
29. august 2005 - 16:17 Der er 19 kommentarer og
1 løsning

Insert i navision

Hej

Jeg skal indsætte nogle poster via visual basic til Navision. Det virker fint nok for de fleste af felterne, men så snart feltet er delt i mere end eet ord, går det galt. Min insert ser således ud:

"Insert into Sag (Sagsnr_, Klientnr_, Sagstype, [Sag modtaget den]) values ('" & Klientnr & "-" & Trim(Str(MaxSagNr + 1)) & "', '" & Klientnr & "', 'INK', " & Date & ")"

Den kan måske se lidt uoverskuelig ud, men virker fint når jeg ikke forsøger at indsætte feltet [Sag modtaget den]
Jeg har selvfølgelig prøvet uden [] og med '' istedet, samt helt uden omkransning, intet virker.

Nogen der har gode ideer?
Avatar billede terry Ekspert
29. august 2005 - 16:27 #1
Have you tried linking the table into Access using an ODBC data source (DSN)?

You maye see that the table has another name!
Avatar billede kabbak Professor
29. august 2005 - 16:30 #2
"Insert into Sag (Sagsnr_, Klientnr_, Sagstype, [Sag modtaget den]) values ('" & Klientnr & "-" & Trim(Str(MaxSagNr + 1)) & "', '" & Klientnr & "', 'INK', #" & Date & "#)"
Avatar billede kabbak Professor
29. august 2005 - 16:34 #3
"Insert into Sag (Sagsnr_, Klientnr_, Sagstype, [Sag modtaget den]) values ('" & Klientnr & "-" & Trim(Str(MaxSagNr + 1)) & "', '" & Klientnr & "', '" & INK & "', #" & Date & "#)"

var der ikke en fejl til sidst ved INK

& "', '" & Klientnr & "', 'INK', " & Date & ")"
Avatar billede terry Ekspert
29. august 2005 - 16:50 #4
silly me, thought it was in Access category :o) Even so it may be worth trying. Maybe spaces are converted to _
Avatar billede tma Juniormester
30. august 2005 - 07:27 #5
Hej

-->Terry, jeg har forsøgt at tage tabellen ind i Access. Her fremstår feltnavnet delt i 3, og jeg kan inserte uden problem (Access bruger [] og så virker det her...).


Jeg vil prøve senere på dagen om det blot er datoafgrænser # der mangler, og vender tilbage med info.

torben
Avatar billede tma Juniormester
30. august 2005 - 11:28 #6
# virker ikke. _ i feltnavnet virker heller ikke. Det virker som om, at den slet ikke kan genkende feltet. Jeg har også prøvet med Sag.[Sag modtaget den] Men det virker heller ikke. Jeg kan selvfølgelig helt undlade at angive felterne og blot angive værdier, men der er rigtig rigtig mange felter i tabellen...

Torben
Avatar billede tma Juniormester
30. august 2005 - 12:00 #7
Jeg forsøger at se hvorledes de enkelte felter ser ud i VB. Jeg har prøvet i Access, men her ser de alt for fine ud (kan godt finde ud af flere ord i felt).
I VB forsøger jeg at se feltnavnene således:

            sqltext = "Select * from Sag where Sagsnr_ = '12-001'"
            cmd.CommandText = sqltext
            Set T = cmd.Execute
           
            Dim i As Integer
            For i = 1 To 100 ' T.Fields.Count
                Debug.Print "Felt:--->" & T.Fields(i) & "<----"
            Next i

Men jeg får bare værdier ud?? Er det ikke den rigtige måde?

Torben
Avatar billede terry Ekspert
30. august 2005 - 12:06 #8
Ah sorry! Normally you have to put a date field in '' when inserting.

"Insert into Sag (Sagsnr_, Klientnr_, Sagstype, [Sag modtaget den]) values ('" & Klientnr & "-" & Trim(Str(MaxSagNr + 1)) & "', '" & Klientnr & "', 'INK', '" & Date & "')"
Avatar billede terry Ekspert
30. august 2005 - 12:07 #9
In Access a select on Date fields has to be in ## but an insert has to be in ''

and its also a good idea to format the date as yyyy-mm-dd
Avatar billede tma Juniormester
30. august 2005 - 12:54 #10
Min insertkommando ser nu således ud:
"Insert into Sag (Sagsnr_, Klientnr_, Sagstype, [Sag modtaget den]) values ('" & Info.Klientnr & "-" & Trim(Str(MaxSagNr + 1)) & "', '" & Info.Klientnr & "', 'INK', '" & Format(Date, "yyyy-mm-dd") & "')"

og fortolket ser den således ud:
Insert into Sag (Sagsnr_, Klientnr_, Sagstype, [Sag modtaget den]) values ('12-200', '12', 'INK', '2005-08-30')

Men jeg får samme fejl: Expected lexical element not found
Avatar billede terry Ekspert
30. august 2005 - 19:25 #11
http://www.accpac.com/support/options/Tech_Notes/T0125_ODBCErrorCodes.html

Which says>
The user has specified a SQL statement that is not syntactically correct.

So you say that without the date field it works OK, but with the date field it fails?

Is it possible to alter the field name WITHOUT spaces? Or maybe create a new table with a date field just for testing to see if it the date format which is incorrect?
Avatar billede tma Juniormester
30. august 2005 - 22:06 #12
The Error is not date-format specifik, since I get the same error if I try to use insert on another textfield [telefon nr]

so the error is specifik to a field combined by several words.

torben
Avatar billede terry Ekspert
31. august 2005 - 12:29 #13
The error

"The user has specified a SQL statement that is not syntactically correct."

means that the SQL is not correct, and this is obviously the cade if field names have spaces.

In Access and SQL server it is possible to place these field names in [] but this doenst seem to be allowed in Navision

So I have a feeling that you need to change the field names which contain spaces.
Avatar billede tma Juniormester
31. august 2005 - 12:34 #14
The Navision system is a huge system, and I cannot change any fields. I will try to insert the data whithout supplying field names.

I will let you know if it works.
Avatar billede tma Juniormester
31. august 2005 - 13:54 #15
Hulk... Jeg mente egentlig at man kunne lave en insert der bare så f.eks. således ud:

INSERT INTO Fordring values('319-044', 30000, 3)

Det kan man bare ikke... Felterne skal åbenbart angives... Nu er jeg på bar bund og har egentlig ikke flere ideer.
Avatar billede terry Ekspert
31. august 2005 - 15:53 #16
You can normally insert without giving the field names, but you then have to make sure that the number of fields and the type mtch those for the table.
Avatar billede terry Ekspert
31. august 2005 - 15:54 #17
and obviously in the same order!
Avatar billede tma Juniormester
20. april 2006 - 10:07 #18
Jeg er nået frem til, at problemet skyldes at felterne er delt i mere end ét ord (f.eks sag modtaget). Normalt vil jeg bruge [sag modtaget] syntaks, men den bliver ikke godtaget af navision ODBC driveren. Den siger at den ikke kan finde feltet. Jeg har også forsøgt mig med 'sag modtaget', men så returneres blot teksten 'sag modtaget', hvilket jeg jo selvsagt ikke kan bruge til noget. Er der nogle der har en ide til hvorledes jeg kan trække data fra navision hvor feltet består af mere end ét ord?

Hilsen Torben
Avatar billede tma Juniormester
11. juli 2007 - 13:26 #19
Fandt en løsning...
Problemet er, at navision vil have feltet indrammet i "gåseøjn" (via shift + F2).
Da det ikke kan gøres i vb uden at systemet tror man afslutter teksten, skal man oprette tegnet med chr(34) istedet.

/Torben
Avatar billede tma Juniormester
05. november 2010 - 10:45 #20
Lukket
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
Kurser inden for grundlæggende programmering

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