Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[VBA/SQL] INSERT INTO statement met een data-type 'double'

Pagina: 1
Acties:
  • 1.182 views

  • burrug
  • Registratie: April 2005
  • Laatst online: 14-10-2024
Hallo,

Ik probeer middels VBA in Excel een INSERT-INTO query uit te voeren in mijn database. Echter lukt dit mij niet. Het gaat om een veld van het type 'double' ( double(6,3) ) welke ik vul met een numerieke waarde. Om deze numerieke waarden kunnen geen quotes geplaatst worden en er kunnen geen komma's in geplaatst worden, omdat de DB deze dan ziet als 2 waarden. Wanneer ik dit allemaal wel doe krijg ik foutmeldingen.

Dit zijn de queries die ik tot dusver heb geprobeerd:

INSERT INTO tabel (veld) VALUES ('4,56') -- Error in Assignment
INSERT INTO tabel (veld) VALUES ("4,56") -- Syntaxerror
INSERT INTO tabel (veld) VALUES (4,56) -- insert value does not match column list

Het stukje VBA wat hierbij hoort (misschien kan het daaraan liggen) :

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Dim conn As Object
Dim rs As Object
Dim strSQL As String
Dim ConnectionString As String

Set conn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

'query
strSQL = "INSERT INTO arprsw (artcode,crdnr,datum,user_id,verkp_verp,inkp_verp) VALUES ('1410.3456','   456','2008-08-13','USER1','-1','4,56')"
ConnectionString = "Driver=Pervasive ODBC Client Interface;ServerName=server1; dbq=@db1"

With conn
      .Open ConnectionString 'Open connection.
      Set rs = .Execute(strSQL)
End With
conn.Close


Het gaat hierbij om het veld 'inkp_verp' welke een double(6,3) betreft.

Weet iemand hoe ik dit kan oplossen?

Google is hierbij niet echt mijn vriend dus ik zoek naar ervaringen en/of mensen die hiervoor een oplossing weten

Tnx :)

Tannoy Revolution R3 105W 6ohm, Marantz PM-7003 2x70W 8ohm, 2x JVG goud/goud, Marantz CD-6003, Marantz ST-6003


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Gebruik eens een punt ipv een komma?

  • burrug
  • Registratie: April 2005
  • Laatst online: 14-10-2024
Nee werkt ook niet.. :) tnx for the input ;)

-- error in assignment

[ Voor 22% gewijzigd door burrug op 13-08-2008 09:08 ]

Tannoy Revolution R3 105W 6ohm, Marantz PM-7003 2x70W 8ohm, 2x JVG goud/goud, Marantz CD-6003, Marantz ST-6003


  • Tukk
  • Registratie: Januari 2002
  • Laatst online: 09:19

Tukk

De α-man met het ẞ-brein

Meteen waarden in een db zetten is niet het toonbeeld van mooi programmeren, juist omdat je nu de insert en de conversie van variabelen in 1 regel uitvoert.
Voor foutafhandeling en mogelijk debuggen is het misschien mooier om eerst de waarden in variabelen te plaatsen. Voor jouw variabele waar je nu een probleem mee hebt wordt dat:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Dim conn As Object
Dim rs As Object
Dim strSQL As String
Dim ConnectionString As String

'---------------------
' Variables for insert
'---------------------
Dim ldbLinkp_verp as Double

Set conn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

' Assign vars
ldbLinkp_verp =  CDbl(4,56)

'query
strSQL = "INSERT INTO arprsw (artcode,crdnr,datum,user_id,verkp_verp,inkp_verp) VALUES ('1410.3456','   456','2008-08-13','USER1','-1',ldbLinkp_verp)"
ConnectionString = "Driver=Pervasive ODBC Client Interface;ServerName=server1; dbq=@db1"

With conn
      .Open ConnectionString 'Open connection.
      Set rs = .Execute(strSQL)
End With
conn.Close


IMHO is dit leesbaarder als je dit voor alle variablen uitvoert en een mogelijk verkeerde input krijg je nu niet op de insert, maar zoals het hoort bij de cDBl()-functie.




Werkt dit?

[ Voor 7% gewijzigd door Tukk op 13-08-2008 09:43 ]

Q: How many geeks does it take to ruin a joke? A: You mean nerd, not geek. And not joke, but riddle. Proceed.


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:22
burrug schreef op woensdag 13 augustus 2008 @ 09:07:
Nee werkt ook niet.. :) tnx for the input ;)

-- error in assignment
Zowiezo zal je een punt moeten gebruiken als decimal-separator en er geen quotes rond zetten (het zijn nl numerieke gegevens). Dat het dan nog niet werkt, zal wel aan iets anders liggen.

We verwachten hier ook van jou als topicstarter wel meer inzet / feedback dan gewoon 'nee, werkt ook niet <insert foutmelding here>'.

[ Voor 24% gewijzigd door whoami op 13-08-2008 09:17 ]

https://fgheysels.github.io/


  • burrug
  • Registratie: April 2005
  • Laatst online: 14-10-2024
@Tukk, tnx voor je reactie

Dus ik zou de variabel als double ook in de querystring moeten zetten?

Dit heb ik nu gedaan, maar ik krijg nu nog steeds dezelfde foutmelding

Een blik op mijn query;

INSERT INTO arprsw (artcode,crdnr,datum,user_id,verkp_verp,inkp_verp) VALUES (1012.0290,570,'2008-08-13','USER1',-1,4,56)


Als foutmelding krijg ik nu nog steeds:
"Insert value list does not match column list"

Dit natuurlijk omdat die komma nog in de waarde staat, waardoor hij de waarde als 2 waardes blijft zien. Dit is toch wel op te lossen? Als ik nl. de waarde in de Database-GUI 'Pervasive control center' handmatig invoer gaat het prima, maar als ik het dus met een SQL-statement doe, gaat hij over zn nek.
Is er geen functie in SQL welke de data om kan zetten of zoiets? *googling*


Overigens hieronder hoe ik de double aanmaak n.a.v. Tukk's-post
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Dim datum As String
Dim fs As Object
Dim conn As Object
Dim rs As Object
Dim strSQL As String
Dim ConnectionString As String
Dim artikelcode As String
Dim ldbLinkp_verp As Double
Dim ldbLverkp_verp As Double
'
' datum in goed format
datum = Format(Now(), "yyyy-mm-dd")
' inkoopprijs als datatype 'double'
ldbLinkp_verp = CDbl(Excel.Sheets("Importbestand").Range("F" & n).Value)
' artikelcode als string
artikelcode = Excel.Sheets("Importbestand").Range("N" & n).Value
' String met connectiegegevens
ConnectionString = "Driver=Pervasive ODBC Client Interface;ServerName=server-1; dbq=@db1"
' query inkoopprijs
strSQL = "INSERT INTO arprsw (artcode,crdnr,datum,user_id,verkp_verp,inkp_verp) VALUES ('1410.0110','   570','" & datum & "','USER1',-1," & ldbLinkp_verp & ")"

[ Voor 35% gewijzigd door burrug op 13-08-2008 09:44 ]

Tannoy Revolution R3 105W 6ohm, Marantz PM-7003 2x70W 8ohm, 2x JVG goud/goud, Marantz CD-6003, Marantz ST-6003


  • Tukk
  • Registratie: Januari 2002
  • Laatst online: 09:19

Tukk

De α-man met het ẞ-brein

burrug schreef op woensdag 13 augustus 2008 @ 09:38:
@Tukk, tnx voor je reactie

Dus ik zou de variabel als double ook in de querystring moeten zetten?

Dit heb ik nu gedaan, maar ik krijg nu nog steeds dezelfde foutmelding

Een blik op mijn query;

INSERT INTO arprsw (artcode,crdnr,datum,user_id,verkp_verp,inkp_verp) VALUES (1012.0290,570,'2008-08-13','USER1',-1,4,56)


Als foutmelding krijg ik nu nog steeds:
"Insert value list does not match column list"

Dit natuurlijk omdat die komma nog in de waarde staat, waardoor hij de waarde als 2 waardes blijft zien. Dit is toch wel op te lossen? Als ik nl. de waarde in de Database-GUI 'Pervasive control center' handmatig invoer gaat het prima, maar als ik het dus met een SQL-statement doe, gaat hij over zn nek.
Is er geen functie in SQL welke de data om kan zetten of zoiets? *googling*
Kijk eens naar mijn query, die ziet er echt anders uit.
code:
1
INSERT INTO arprsw (artcode,crdnr,datum,user_id,verkp_verp,inkp_verp) VALUES ('1410.3456','   456','2008-08-13','USER1','-1',ldbLinkp_verp)

Q: How many geeks does it take to ruin a joke? A: You mean nerd, not geek. And not joke, but riddle. Proceed.


  • Big Womly
  • Registratie: Oktober 2007
  • Laatst online: 01-09 13:39

Big Womly

Live forever, or die trying

4,56 moet echt wel met een punt geschreven worden. Want nu wordt het opgevat als 2 parameters, nl 4 en 56. Je hebt 6 variabelen en 7 parameters, die 56 kan hij met jou query dus niet in een variabele proppen.

When you talk to God it's called prayer, but when God talks to you it's called schizophrenia


  • burrug
  • Registratie: April 2005
  • Laatst online: 14-10-2024
Ok, klopt ik miste wat singlequotes

bij deze verbeterd;
code:
1
INSERT INTO arprsw (artcode,crdnr,datum,user_id,verkp_verp,inkp_verp) VALUES ('1410.3456','   570','2008-08-13','USER1','-1',4,56)


Maar ik krijg nu nog steeds dezelfde foutmelding, dus de reactie blijft wat dat betreft hetzelfde.

Het gaat hierbij uiteraard om de waarde '4,56' welke wordt gescheiden door een komma, waardoor het als 2 waarden wordt gezien

Tannoy Revolution R3 105W 6ohm, Marantz PM-7003 2x70W 8ohm, 2x JVG goud/goud, Marantz CD-6003, Marantz ST-6003


  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 14-11 22:24
Waarom gebruik je geen Command ipv de sql string rechtstreeks op te geven??

VB:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
Dim bla as new ADODB.Command
Dim cn as new ADODB.Connection

  'Maak connectie met db
  
  set bla.ActiveConnection = cn
  bla.CommandText = "INSERT INTO tabel (doubleveld) VALUES (?)"
  
  bla.Parameters.Append bla.CreateParameter("doublevalue", adDouble, adParamInput, , doubleVar)

  bla.Execute

Hail to the king baby!


  • Tukk
  • Registratie: Januari 2002
  • Laatst online: 09:19

Tukk

De α-man met het ẞ-brein

burrug schreef op woensdag 13 augustus 2008 @ 09:50:
Ok, klopt ik miste wat singlequotes

bij deze verbeterd;
code:
1
INSERT INTO arprsw (artcode,crdnr,datum,user_id,verkp_verp,inkp_verp) VALUES ('1410.3456','   570','2008-08-13','USER1','-1',4,56)


Maar ik krijg nu nog steeds dezelfde foutmelding, dus de reactie blijft wat dat betreft hetzelfde.

Het gaat hierbij uiteraard om de waarde '4,56' welke wordt gescheiden door een komma, waardoor het als 2 waarden wordt gezien
Lees mijn 1e reply!

Kijk eens goed hoe ik de insert uit voer.... :/
INSERT INTO arprsw (artcode,crdnr,datum,user_id,verkp_verp,inkp_verp) VALUES ('1410.3456',' 456','2008-08-13','USER1','-1',ldbLinkp_verp)

[ Voor 11% gewijzigd door Tukk op 13-08-2008 10:02 ]

Q: How many geeks does it take to ruin a joke? A: You mean nerd, not geek. And not joke, but riddle. Proceed.


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:22
Tja, dit begint hier toch wel een 'hou me bij het handje' topic te worden, en dat doen we hier echt niet.
Bekijk je query eens goed, zorg er voor dat je 'm goed uitlijnt (dan vallen fouten al beter op), gebruik quotes waar nodig (alfanumerieke gegevens), en geen quotes bij numerieke gegevens.
Als je een decimaal gedeelte hebt bij een double bv, dan scheidt je dat met een punt.
Zorg er ook voor dat je datum goed meegegeven wordt (yyyymmdd).

Je kan ook eens kijken naar parametrized queries, want ik kan me voorstellen dat je applicatie niet altijd dezelfde waardes in je database zal zetten ...

Verder raad ik je aan om eens een tutorial op te snorren. We willen je hier best helpen, maar het moet wel van 2 kanten komen.

https://fgheysels.github.io/

Pagina: 1

Dit topic is gesloten.