rpter
asked on
insert date field into access with oledbcommand parameters
i've got the following code, when i execute it i get an error (invalid command..), when i remove the date fields it works.
do i have to something special to insert the date fields?
Dim objConn As OleDbConnection
Dim objCmd As OleDbCommand
' create the connection
objConn = New OleDbConnection("Provider= Microsoft. Jet.OleDb. 4.0;Data Source=" & file)
' create the command for the header
objCmd = New OleDbCommand("INSERT INTO OrderHead (Date, AmmendedDate, DocumentNumber, ContractNumber, " & _
"Supplier, SupplierName, Payment, TotalQty, " & _
"Yarn, Description, Weight, BarcodeInfo, PackingQtyPerCarton, Comments, " & _
"SpecSent, PurchaseOrder, Packaging, QualityApproved, PackagingApproved) " & _
"VALUES (@Date, @AmmendedDate@, DocumentNumber, @ContractNumber, " & _
"@Supplier, @SupplierName, @Payment, @TotalQty, " & _
"@Yarn, @Description, @Weight, @BarcodeInfo, @PackingQtyPerCarton, @Comments, " & _
"@SpecSent, @PurchaseOrder, @Packagaing, @QualityApproved, @PackagingApproved)", objConn)
' set the parameters
objCmd.Parameters.Add("@Do cumentNumb er", DocumentNumber)
objCmd.Parameters.Add("@Co ntractNumb er", ContractNumber)
' Comment out the next 2 lines, and it works (when the date and ammendeddate field is removed from above)
objCmd.Parameters.Add("@Da te", ContractDate)
objCmd.Parameters.Add("@Am mendedDate ", AmmendedDate)
objCmd.Parameters.Add("@Su pplier", Supplier)
objCmd.Parameters.Add("@Su pplierName ", SupplierName)
objCmd.Parameters.Add("@Pa yment", Payment)
objCmd.Parameters.Add("@To talQty", TotalQty)
objCmd.Parameters.Add("@Ya rn", Yarn)
objCmd.Parameters.Add("@De scription" , Description)
objCmd.Parameters.Add("@We ight", Weight)
objCmd.Parameters.Add("@Ba rcodeInfo" , BarcodeInfo)
objCmd.Parameters.Add("@Pa ckingQtyPe rCarton", PackingQtyPerCarton)
objCmd.Parameters.Add("@Co mments", Comments)
objCmd.Parameters.Add("@Sp ecSent", SpecSent)
objCmd.Parameters.Add("@Pu rchaseOrde r", PurchaseOrder)
objCmd.Parameters.Add("@Pa ckaging", Packaging)
objCmd.Parameters.Add("@Qu alityAppro ved", QualityApproved)
objCmd.Parameters.Add("@Pa ckagingApp roved", PackagingApproved)
' open the connection
objConn.Open()
Try
' insert the header
objCmd.ExecuteNonQuery()
Catch ex As Exception
MsgBox(objCmd.CommandText)
MsgBox(ex.ToString)
End Try
do i have to something special to insert the date fields?
Dim objConn As OleDbConnection
Dim objCmd As OleDbCommand
' create the connection
objConn = New OleDbConnection("Provider=
' create the command for the header
objCmd = New OleDbCommand("INSERT INTO OrderHead (Date, AmmendedDate, DocumentNumber, ContractNumber, " & _
"Supplier, SupplierName, Payment, TotalQty, " & _
"Yarn, Description, Weight, BarcodeInfo, PackingQtyPerCarton, Comments, " & _
"SpecSent, PurchaseOrder, Packaging, QualityApproved, PackagingApproved) " & _
"VALUES (@Date, @AmmendedDate@, DocumentNumber, @ContractNumber, " & _
"@Supplier, @SupplierName, @Payment, @TotalQty, " & _
"@Yarn, @Description, @Weight, @BarcodeInfo, @PackingQtyPerCarton, @Comments, " & _
"@SpecSent, @PurchaseOrder, @Packagaing, @QualityApproved, @PackagingApproved)", objConn)
' set the parameters
objCmd.Parameters.Add("@Do
objCmd.Parameters.Add("@Co
' Comment out the next 2 lines, and it works (when the date and ammendeddate field is removed from above)
objCmd.Parameters.Add("@Da
objCmd.Parameters.Add("@Am
objCmd.Parameters.Add("@Su
objCmd.Parameters.Add("@Su
objCmd.Parameters.Add("@Pa
objCmd.Parameters.Add("@To
objCmd.Parameters.Add("@Ya
objCmd.Parameters.Add("@De
objCmd.Parameters.Add("@We
objCmd.Parameters.Add("@Ba
objCmd.Parameters.Add("@Pa
objCmd.Parameters.Add("@Co
objCmd.Parameters.Add("@Sp
objCmd.Parameters.Add("@Pu
objCmd.Parameters.Add("@Pa
objCmd.Parameters.Add("@Qu
objCmd.Parameters.Add("@Pa
' open the connection
objConn.Open()
Try
' insert the header
objCmd.ExecuteNonQuery()
Catch ex As Exception
MsgBox(objCmd.CommandText)
MsgBox(ex.ToString)
End Try
This is because Date is a reserved word, rename your date field to something else or enclose it in []
ASKER
ah ok, yep missed that, but now i get a 'Data type mismatch', again on the date fields.
Could you post the new code ?
ASKER
new code below. ContractDate & AmmendedDate both return a Date field (and have valid dates in)
Dim objConn As OleDbConnection
Dim objCmd As OleDbCommand
' create the connection
objConn = New OleDbConnection("Provider= Microsoft. Jet.OleDb. 4.0;Data Source=" & file)
' create the command for the header
objCmd = New OleDbCommand("INSERT INTO OrderHead (DocumentNumber, ContractNumber, " & _
"Supplier, SupplierName, Payment, TotalQty, " & _
"Yarn, Description, Weight, BarcodeInfo, PackingQtyPerCarton, Comments, " & _
"SpecSent, PurchaseOrder, Packaging, QualityApproved, PackagingApproved, [Date], AmmendedDate) " & _
"VALUES (@DocumentNumber, @ContractNumber, " & _
"@Supplier, @SupplierName, @Payment, @TotalQty, " & _
"@Yarn, @Description, @Weight, @BarcodeInfo, @PackingQtyPerCarton, @Comments, " & _
"@SpecSent, @PurchaseOrder, @Packagaing, @QualityApproved, @PackagingApproved, @Date, @AmmendedDate)", objConn)
' set the parameters
objCmd.Parameters.Add("@Do cumentNumb er", DocumentNumber)
objCmd.Parameters.Add("@Co ntractNumb er", ContractNumber)
objCmd.Parameters.Add("@Da te", ContractDate)
objCmd.Parameters.Add("@Am mendedDate ", AmmendedDate)
objCmd.Parameters.Add("@Su pplier", Supplier)
objCmd.Parameters.Add("@Su pplierName ", SupplierName)
objCmd.Parameters.Add("@Pa yment", Payment)
objCmd.Parameters.Add("@To talQty", TotalQty)
objCmd.Parameters.Add("@Ya rn", Yarn)
objCmd.Parameters.Add("@De scription" , Description)
objCmd.Parameters.Add("@We ight", Weight)
objCmd.Parameters.Add("@Ba rcodeInfo" , BarcodeInfo)
objCmd.Parameters.Add("@Pa ckingQtyPe rCarton", PackingQtyPerCarton)
objCmd.Parameters.Add("@Co mments", Comments)
objCmd.Parameters.Add("@Sp ecSent", SpecSent)
objCmd.Parameters.Add("@Pu rchaseOrde r", PurchaseOrder)
objCmd.Parameters.Add("@Pa ckaging", Packaging)
objCmd.Parameters.Add("@Qu alityAppro ved", QualityApproved)
objCmd.Parameters.Add("@Pa ckagingApp roved", PackagingApproved)
' open the connection
objConn.Open()
' insert the header
Try
objCmd.ExecuteNonQuery()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
Dim objConn As OleDbConnection
Dim objCmd As OleDbCommand
' create the connection
objConn = New OleDbConnection("Provider=
' create the command for the header
objCmd = New OleDbCommand("INSERT INTO OrderHead (DocumentNumber, ContractNumber, " & _
"Supplier, SupplierName, Payment, TotalQty, " & _
"Yarn, Description, Weight, BarcodeInfo, PackingQtyPerCarton, Comments, " & _
"SpecSent, PurchaseOrder, Packaging, QualityApproved, PackagingApproved, [Date], AmmendedDate) " & _
"VALUES (@DocumentNumber, @ContractNumber, " & _
"@Supplier, @SupplierName, @Payment, @TotalQty, " & _
"@Yarn, @Description, @Weight, @BarcodeInfo, @PackingQtyPerCarton, @Comments, " & _
"@SpecSent, @PurchaseOrder, @Packagaing, @QualityApproved, @PackagingApproved, @Date, @AmmendedDate)", objConn)
' set the parameters
objCmd.Parameters.Add("@Do
objCmd.Parameters.Add("@Co
objCmd.Parameters.Add("@Da
objCmd.Parameters.Add("@Am
objCmd.Parameters.Add("@Su
objCmd.Parameters.Add("@Su
objCmd.Parameters.Add("@Pa
objCmd.Parameters.Add("@To
objCmd.Parameters.Add("@Ya
objCmd.Parameters.Add("@De
objCmd.Parameters.Add("@We
objCmd.Parameters.Add("@Ba
objCmd.Parameters.Add("@Pa
objCmd.Parameters.Add("@Co
objCmd.Parameters.Add("@Sp
objCmd.Parameters.Add("@Pu
objCmd.Parameters.Add("@Pa
objCmd.Parameters.Add("@Qu
objCmd.Parameters.Add("@Pa
' open the connection
objConn.Open()
' insert the header
Try
objCmd.ExecuteNonQuery()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
Typically you surround the date value with "#" as
objCmd.Parameters.Add("@Da te", "#" & ContractDate & "#")
objCmd.Parameters.Add("@Am mendedDate ", "#" & AmmendedDate & "#")
objCmd.Parameters.Add("@Da
objCmd.Parameters.Add("@Am
ASKER
already tried with that, it doesnt work.
It is because the date type in vb differs from date type in oledb add this and it will work
objCmd.Parameters.Add("@Da te", System.Data.OleDb.OleDbTyp e.DBDate)
objCmd.Parameters("@Date") .value = ContractDate
objCmd.Parameters.Add("@Am mendedDate ", System.Data.OleDb.OleDbTyp e.DBDate)
objCmd.Parameters("@Ammend edDate").v alue = AmmendedDate
objCmd.Parameters.Add("@Da
objCmd.Parameters("@Date")
objCmd.Parameters.Add("@Am
objCmd.Parameters("@Ammend
ASKER
i still get the same error.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
its a date field, but just to make sure i used the now keyword as below;
objCmd.Parameters.Add("@Da te", System.Data.OleDb.OleDbTyp e.DBDate)
objCmd.Parameters("@Date") .Value = Now
it still didnt work. i'll do some more tests then, maybe its something on my database if it worked for you.
objCmd.Parameters.Add("@Da
objCmd.Parameters("@Date")
it still didnt work. i'll do some more tests then, maybe its something on my database if it worked for you.
just to be sure could you post your code again?
ASKER
here it is, so far....
Dim objConn As OleDbConnection
Dim objCmd As OleDbCommand
' create the connection
objConn = New OleDbConnection("Provider= Microsoft. Jet.OleDb. 4.0;Data Source=" & file)
' create the command for the header
objCmd = New OleDbCommand("INSERT INTO OrderHead (DocumentNumber, ContractNumber, " & _
"Supplier, SupplierName, Payment, TotalQty, " & _
"Yarn, Description, Weight, BarcodeInfo, PackingQtyPerCarton, Comments, " & _
"SpecSent, PurchaseOrder, Packaging, QualityApproved, PackagingApproved, [Date]) " & _
"VALUES (@DocumentNumber, @ContractNumber, @Supplier, @SupplierName, @Payment, " & _
"@TotalQty, @Yarn, @Description, @Weight, @BarcodeInfo, @PackingQtyPerCarton, " & _
"@Comments, @SpecSent, @PurchaseOrder, @Packagaing, @QualityApproved, @PackagingApproved, @Date)", objConn)
' set the parameters
objCmd.Parameters.Add("@Do cumentNumb er", DocumentNumber)
objCmd.Parameters.Add("@Co ntractNumb er", ContractNumber)
objCmd.Parameters.Add("@Da te", System.Data.OleDb.OleDbTyp e.DBDate)
objCmd.Parameters("@Date") .Value = ContractDate ' Also tried replacing ContractDate with Now()
'objCmd.Parameters.Add("@A mmendedDat e", AmmendedDate)
objCmd.Parameters.Add("@Su pplier", Supplier)
objCmd.Parameters.Add("@Su pplierName ", SupplierName)
objCmd.Parameters.Add("@Pa yment", Payment)
objCmd.Parameters.Add("@To talQty", TotalQty)
objCmd.Parameters.Add("@Ya rn", Yarn)
objCmd.Parameters.Add("@De scription" , Description)
objCmd.Parameters.Add("@We ight", Weight)
objCmd.Parameters.Add("@Ba rcodeInfo" , BarcodeInfo)
objCmd.Parameters.Add("@Pa ckingQtyPe rCarton", PackingQtyPerCarton)
objCmd.Parameters.Add("@Co mments", Comments)
objCmd.Parameters.Add("@Sp ecSent", SpecSent)
objCmd.Parameters.Add("@Pu rchaseOrde r", PurchaseOrder)
objCmd.Parameters.Add("@Pa ckaging", Packaging)
objCmd.Parameters.Add("@Qu alityAppro ved", QualityApproved)
objCmd.Parameters.Add("@Pa ckagingApp roved", PackagingApproved)
' open the connection
objConn.Open()
' insert the header
Try
objCmd.ExecuteNonQuery()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
Dim objConn As OleDbConnection
Dim objCmd As OleDbCommand
' create the connection
objConn = New OleDbConnection("Provider=
' create the command for the header
objCmd = New OleDbCommand("INSERT INTO OrderHead (DocumentNumber, ContractNumber, " & _
"Supplier, SupplierName, Payment, TotalQty, " & _
"Yarn, Description, Weight, BarcodeInfo, PackingQtyPerCarton, Comments, " & _
"SpecSent, PurchaseOrder, Packaging, QualityApproved, PackagingApproved, [Date]) " & _
"VALUES (@DocumentNumber, @ContractNumber, @Supplier, @SupplierName, @Payment, " & _
"@TotalQty, @Yarn, @Description, @Weight, @BarcodeInfo, @PackingQtyPerCarton, " & _
"@Comments, @SpecSent, @PurchaseOrder, @Packagaing, @QualityApproved, @PackagingApproved, @Date)", objConn)
' set the parameters
objCmd.Parameters.Add("@Do
objCmd.Parameters.Add("@Co
objCmd.Parameters.Add("@Da
objCmd.Parameters("@Date")
'objCmd.Parameters.Add("@A
objCmd.Parameters.Add("@Su
objCmd.Parameters.Add("@Su
objCmd.Parameters.Add("@Pa
objCmd.Parameters.Add("@To
objCmd.Parameters.Add("@Ya
objCmd.Parameters.Add("@De
objCmd.Parameters.Add("@We
objCmd.Parameters.Add("@Ba
objCmd.Parameters.Add("@Pa
objCmd.Parameters.Add("@Co
objCmd.Parameters.Add("@Sp
objCmd.Parameters.Add("@Pu
objCmd.Parameters.Add("@Pa
objCmd.Parameters.Add("@Qu
objCmd.Parameters.Add("@Pa
' open the connection
objConn.Open()
' insert the header
Try
objCmd.ExecuteNonQuery()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
ASKER
ok, so after a bit of searching on the net i've found plenty of references to the same error.
None of them however seems to have a solution, except for micrsoft themselves, which seem to recommend you change your field type to text!!!
a bit more playing around in vb and i got it to work, the problem seems to be with using parameters, if you dont use them it seems to work.
This isnt really the way i wanted to do it, as its a bit messy, but hey, if it works right....
i've awarded you the points, and you fixed the original question, although i'd like to know if you manage to figure out why my parameters dont work, maybe you could send me your code that you said worked??
Thanks for your help!
My new code;
Dim objConn As OleDbConnection
Dim objCmd As OleDbCommand
' create the connection
objConn = New OleDbConnection("Provider= Microsoft. Jet.OleDb. 4.0;Data Source=" & file)
' create the command for the header
objCmd = New OleDbCommand("INSERT INTO OrderHead (DocumentNumber, ContractNumber, " & _
"Supplier, SupplierName, Payment, TotalQty, " & _
"Yarn, Description, Weight, BarcodeInfo, PackingQtyPerCarton, Comments, " & _
"SpecSent, PurchaseOrder, Packaging, QualityApproved, PackagingApproved, [Date], AmmendedDate) " & _
"VALUES ('" & _
DocumentNumber & "', '" & _
ContractNumber & "', '" & _
Supplier & "', '" & _
SupplierName & "', '" & _
Payment & "', " & _
TotalQty & ", '" & _
Yarn & "', '" & _
Description & "', '" & _
Weight & "', '" & _
BarcodeInfo & "', '" & _
PackingQtyPerCarton & "', '" & _
Comments & "', " & _
SpecSent & ", '" & _
PurchaseOrder & "', " & _
Packaging & ", " & _
QualityApproved & ", " & _
PackagingApproved & ", #" & _
ContractDate & "#, #" & _
AmmendedDate & "#)", objConn)
' open the connection
objConn.Open()
' insert the header
Try
objCmd.ExecuteNonQuery()
Catch ex As Exception
MsgBox(objCmd.CommandText)
MsgBox(ex.ToString)
End Try
None of them however seems to have a solution, except for micrsoft themselves, which seem to recommend you change your field type to text!!!
a bit more playing around in vb and i got it to work, the problem seems to be with using parameters, if you dont use them it seems to work.
This isnt really the way i wanted to do it, as its a bit messy, but hey, if it works right....
i've awarded you the points, and you fixed the original question, although i'd like to know if you manage to figure out why my parameters dont work, maybe you could send me your code that you said worked??
Thanks for your help!
My new code;
Dim objConn As OleDbConnection
Dim objCmd As OleDbCommand
' create the connection
objConn = New OleDbConnection("Provider=
' create the command for the header
objCmd = New OleDbCommand("INSERT INTO OrderHead (DocumentNumber, ContractNumber, " & _
"Supplier, SupplierName, Payment, TotalQty, " & _
"Yarn, Description, Weight, BarcodeInfo, PackingQtyPerCarton, Comments, " & _
"SpecSent, PurchaseOrder, Packaging, QualityApproved, PackagingApproved, [Date], AmmendedDate) " & _
"VALUES ('" & _
DocumentNumber & "', '" & _
ContractNumber & "', '" & _
Supplier & "', '" & _
SupplierName & "', '" & _
Payment & "', " & _
TotalQty & ", '" & _
Yarn & "', '" & _
Description & "', '" & _
Weight & "', '" & _
BarcodeInfo & "', '" & _
PackingQtyPerCarton & "', '" & _
Comments & "', " & _
SpecSent & ", '" & _
PurchaseOrder & "', " & _
Packaging & ", " & _
QualityApproved & ", " & _
PackagingApproved & ", #" & _
ContractDate & "#, #" & _
AmmendedDate & "#)", objConn)
' open the connection
objConn.Open()
' insert the header
Try
objCmd.ExecuteNonQuery()
Catch ex As Exception
MsgBox(objCmd.CommandText)
MsgBox(ex.ToString)
End Try