Beste medeprogrammeurs....
Ik probeer een aantal gegevens via ADO vanuit m'n VB programma toe te voegen aan een MSDE database met behulp van een "stored procedure".
Het gaat om NAW gegevens. Wanneer een cliënt wordt toegevoegd aan de database is het niet altijd zeker op welke afdeling hij/zij terecht komt dus hoeft men niet persé een afdeling te kiezen. Hierop loopt alles fout. De opgeslagen procedure krijgt een x-aantal parameters te verwerken echter wanneer de procedure bij "ID_afdeling" beland gaat het mis. Hij ontvangt daar een lege string --> eigenlijk een lege Integer. De waarde is "" dus de procedure denkt dat hij een string te verwerken krijgt. Hierdoor wordt alles geblokkeerd en ik kom maar niet verder.
Wanneer ik van de betreffende parameter een varchar maak ipv een Integer gaat het goed echter hij vult nu een 0 in. Dit is NIET de bedoeling. Zodra er geen afdeling gekozen is mag er ook GEEN waarde in de database ingevuld worden.
Daar het veld in de database gelinkt is aan andere tabellen is een 0 FOUT omdat een 0 niet voorkomt in zijn CONSTRAINT.
Hieronder wat code:
IN DE DATABASE::
ALTER PROCEDURE dbo.insertClientSP
/*
*/
-- parameters
(
@Zoeknaam varChar(50) = Null,
@Geslacht bit,
@Voorvoegsels varchar(10) = Null,
@Achternaam varchar(50) = Null,
@Voorletters varchar(10) = Null,
@Voornamen varchar(50) = Null,
@Roepnaam varchar(40) = Null,
@Adres varchar(50) = Null,
@Postcode varchar(7) = Null,
@Woonplaats varchar(50) = Null,
@Telefoon varchar(11) = Null,
@ID_afdeling varchar(50) = Null,
@Kamer varchar(7) = Null,
@Geboortedatum datetime = Null
)
-- query
AS
SET NOCOUNT ON
DECLARE @ID_afdeling_int int
If @ID_afdeling = Null
SET @ID_afdeling_int = CONVERT(int, @ID_afdeling)
INSERT INTO dbo.tblClienten
(Zoeknaam, Geslacht, Voorvoegsels, Achternaam, Voorletters, Voornamen, Roepnaam,
Adres, Postcode, Woonplaats, Telefoon, ID_afdeling, Kamer, Geboortedatum, PrintDatum)
VALUES (@Zoeknaam, @Geslacht, @Voorvoegsels, @Achternaam, @Voorletters, @Voornamen, @Roepnaam,
@Adres, @Postcode, @Woonplaats, @Telefoon, @ID_afdeling_int, @Kamer, @Geboortedatum, getDate())
RETURN
IN VB::
Public Sub saveNewClient()
Dim objParam As ADODB.Parameter
Dim objSPRs As ADODB.Recordset
Dim objSPComm As ADODB.Command
Set objSPComm = New ADODB.Command
With objSPComm
.ActiveConnection = gobjConn
.CommandType = adCmdStoredProc
.CommandText = "insertClientSP"
End With
'Zoeknaam
Set objParam = objSPComm.CreateParameter("Zoeknaam", adVarChar, adParamInput, 50, Me.txtZoeknaam.Text)
objSPComm.Parameters.Append objParam
'geslacht
Set objParam = objSPComm.CreateParameter("Geslacht", adBoolean, adParamInput, 10, Me.optSex(0).Value)
objSPComm.Parameters.Append objParam
'voorvoegsels
Set objParam = objSPComm.CreateParameter("Voorvoegsels", adVarChar, adParamInput, 10, Me.txtVoorvoegsels.Text)
objSPComm.Parameters.Append objParam
'achternaam
Set objParam = objSPComm.CreateParameter("Achternaam", adVarChar, adParamInput, 200, Me.txtAchternaam.Text)
objSPComm.Parameters.Append objParam
'voorletters
Set objParam = objSPComm.CreateParameter("Voorletters", adVarChar, adParamInput, 50, Me.txtVoorletters.Text)
objSPComm.Parameters.Append objParam
'voornamen
Set objParam = objSPComm.CreateParameter("Voornamen", adVarChar, adParamInput, 150, Me.txtVoornamen.Text)
objSPComm.Parameters.Append objParam
'Roepnaam
Set objParam = objSPComm.CreateParameter("Roepnaam", adVarChar, adParamInput, 100, Me.txtRoepnaam.Text)
objSPComm.Parameters.Append objParam
'Adres
Set objParam = objSPComm.CreateParameter("Adres", adVarChar, adParamInput, 100, Me.txtAdres.Text)
objSPComm.Parameters.Append objParam
'Postcode
Set objParam = objSPComm.CreateParameter("Postcode", adVarChar, adParamInput, 7, Me.txtPostcode.Text)
objSPComm.Parameters.Append objParam
'Woonplaats
Set objParam = objSPComm.CreateParameter("Woonplaats", adVarChar, adParamInput, 100, Me.txtWoonplaats.Text)
objSPComm.Parameters.Append objParam
'Telefoon
Set objParam = objSPComm.CreateParameter("Telefoon", adVarChar, adParamInput, 11, Me.txtTelefoon.Text)
objSPComm.Parameters.Append objParam
'afdeling_ID
'LET OP : hier halen we de TAG op van de gekozen afdeling!!!!!!!
Set objParam = objSPComm.CreateParameter("ID_afdeling", adVarChar, adParamInput, 50, Me.txtAfdeling.Tag)
objSPComm.Parameters.Append objParam
'kamernummer
Set objParam = objSPComm.CreateParameter("Kamer", adVarChar, adParamInput, 10, Me.txtKamernummer.Text)
objSPComm.Parameters.Append objParam
'geboortedatum
Set objParam = objSPComm.CreateParameter("Geboortedatum", adDate, adParamInput, , Me.DatePicker1.Value)
objSPComm.Parameters.Append objParam
Set objSPRs = objSPComm.Execute(, objParam)
Set objSPRs = Nothing
Set objSPComm = Nothing
Unload Me
Set frmAddClient = Nothing
End Sub
Bovenstaande code is ook uitgevoerd met een Array echter gaf hetzelfde resultaat.....
Weet iemand de/een oplossing??
Bedankt,
Ik probeer een aantal gegevens via ADO vanuit m'n VB programma toe te voegen aan een MSDE database met behulp van een "stored procedure".
Het gaat om NAW gegevens. Wanneer een cliënt wordt toegevoegd aan de database is het niet altijd zeker op welke afdeling hij/zij terecht komt dus hoeft men niet persé een afdeling te kiezen. Hierop loopt alles fout. De opgeslagen procedure krijgt een x-aantal parameters te verwerken echter wanneer de procedure bij "ID_afdeling" beland gaat het mis. Hij ontvangt daar een lege string --> eigenlijk een lege Integer. De waarde is "" dus de procedure denkt dat hij een string te verwerken krijgt. Hierdoor wordt alles geblokkeerd en ik kom maar niet verder.
Wanneer ik van de betreffende parameter een varchar maak ipv een Integer gaat het goed echter hij vult nu een 0 in. Dit is NIET de bedoeling. Zodra er geen afdeling gekozen is mag er ook GEEN waarde in de database ingevuld worden.
Daar het veld in de database gelinkt is aan andere tabellen is een 0 FOUT omdat een 0 niet voorkomt in zijn CONSTRAINT.
Hieronder wat code:
IN DE DATABASE::
ALTER PROCEDURE dbo.insertClientSP
/*
*/
-- parameters
(
@Zoeknaam varChar(50) = Null,
@Geslacht bit,
@Voorvoegsels varchar(10) = Null,
@Achternaam varchar(50) = Null,
@Voorletters varchar(10) = Null,
@Voornamen varchar(50) = Null,
@Roepnaam varchar(40) = Null,
@Adres varchar(50) = Null,
@Postcode varchar(7) = Null,
@Woonplaats varchar(50) = Null,
@Telefoon varchar(11) = Null,
@ID_afdeling varchar(50) = Null,
@Kamer varchar(7) = Null,
@Geboortedatum datetime = Null
)
-- query
AS
SET NOCOUNT ON
DECLARE @ID_afdeling_int int
If @ID_afdeling = Null
SET @ID_afdeling_int = CONVERT(int, @ID_afdeling)
INSERT INTO dbo.tblClienten
(Zoeknaam, Geslacht, Voorvoegsels, Achternaam, Voorletters, Voornamen, Roepnaam,
Adres, Postcode, Woonplaats, Telefoon, ID_afdeling, Kamer, Geboortedatum, PrintDatum)
VALUES (@Zoeknaam, @Geslacht, @Voorvoegsels, @Achternaam, @Voorletters, @Voornamen, @Roepnaam,
@Adres, @Postcode, @Woonplaats, @Telefoon, @ID_afdeling_int, @Kamer, @Geboortedatum, getDate())
RETURN
IN VB::
Public Sub saveNewClient()
Dim objParam As ADODB.Parameter
Dim objSPRs As ADODB.Recordset
Dim objSPComm As ADODB.Command
Set objSPComm = New ADODB.Command
With objSPComm
.ActiveConnection = gobjConn
.CommandType = adCmdStoredProc
.CommandText = "insertClientSP"
End With
'Zoeknaam
Set objParam = objSPComm.CreateParameter("Zoeknaam", adVarChar, adParamInput, 50, Me.txtZoeknaam.Text)
objSPComm.Parameters.Append objParam
'geslacht
Set objParam = objSPComm.CreateParameter("Geslacht", adBoolean, adParamInput, 10, Me.optSex(0).Value)
objSPComm.Parameters.Append objParam
'voorvoegsels
Set objParam = objSPComm.CreateParameter("Voorvoegsels", adVarChar, adParamInput, 10, Me.txtVoorvoegsels.Text)
objSPComm.Parameters.Append objParam
'achternaam
Set objParam = objSPComm.CreateParameter("Achternaam", adVarChar, adParamInput, 200, Me.txtAchternaam.Text)
objSPComm.Parameters.Append objParam
'voorletters
Set objParam = objSPComm.CreateParameter("Voorletters", adVarChar, adParamInput, 50, Me.txtVoorletters.Text)
objSPComm.Parameters.Append objParam
'voornamen
Set objParam = objSPComm.CreateParameter("Voornamen", adVarChar, adParamInput, 150, Me.txtVoornamen.Text)
objSPComm.Parameters.Append objParam
'Roepnaam
Set objParam = objSPComm.CreateParameter("Roepnaam", adVarChar, adParamInput, 100, Me.txtRoepnaam.Text)
objSPComm.Parameters.Append objParam
'Adres
Set objParam = objSPComm.CreateParameter("Adres", adVarChar, adParamInput, 100, Me.txtAdres.Text)
objSPComm.Parameters.Append objParam
'Postcode
Set objParam = objSPComm.CreateParameter("Postcode", adVarChar, adParamInput, 7, Me.txtPostcode.Text)
objSPComm.Parameters.Append objParam
'Woonplaats
Set objParam = objSPComm.CreateParameter("Woonplaats", adVarChar, adParamInput, 100, Me.txtWoonplaats.Text)
objSPComm.Parameters.Append objParam
'Telefoon
Set objParam = objSPComm.CreateParameter("Telefoon", adVarChar, adParamInput, 11, Me.txtTelefoon.Text)
objSPComm.Parameters.Append objParam
'afdeling_ID
'LET OP : hier halen we de TAG op van de gekozen afdeling!!!!!!!
Set objParam = objSPComm.CreateParameter("ID_afdeling", adVarChar, adParamInput, 50, Me.txtAfdeling.Tag)
objSPComm.Parameters.Append objParam
'kamernummer
Set objParam = objSPComm.CreateParameter("Kamer", adVarChar, adParamInput, 10, Me.txtKamernummer.Text)
objSPComm.Parameters.Append objParam
'geboortedatum
Set objParam = objSPComm.CreateParameter("Geboortedatum", adDate, adParamInput, , Me.DatePicker1.Value)
objSPComm.Parameters.Append objParam
Set objSPRs = objSPComm.Execute(, objParam)
Set objSPRs = Nothing
Set objSPComm = Nothing
Unload Me
Set frmAddClient = Nothing
End Sub
Bovenstaande code is ook uitgevoerd met een Array echter gaf hetzelfde resultaat.....
Weet iemand de/een oplossing??
Bedankt,