Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Problem calling SP in SQL 2000 from VFP via SPT
Message
From
03/08/2001 03:45:21
Martin Van Krieken
Capgemini Nederland Bv
Utrecht, Netherlands
 
 
General information
Forum:
Microsoft SQL Server
Category:
Stored procedures, Triggers, UDFs
Miscellaneous
Thread ID:
00536342
Message ID:
00539266
Views:
19
Hi Mike,

Here's the VFP code which calles the SP:

lnResult = SqlExec(lnBlDbHandle, 'Exec sp_UpdateBulkLoad @tiBedrijfId=' +
Transform(.piBedrijfId) + ",@tcLangUp='NL'")

I had a lot of test code in my SP to see where it goes wrong. There's not a consistent place however. I keep adding test code till I'm sure I catch the bug, but then it failes on a complete other part of the code. Here's the Sp code without test code (sorry for the Dutch phrases):

CREATE Procedure sp_UpdateDier
(
@tiBedrijfId Int,
@tcLangDown t_Language,
@tcSourceApp VarChar(30)
)
As
Declare @liRowCount Int,
@iBlDierId Int,
@lDelete Bit,
@liError Int,
@pk_Dier Int,
@Naam Char(30),
@Roepnaam Char(15),
@lMale Bit,
@GeboorteDatum t_Datum,
@DierSoort SmallInt,
@Eigenaar Char(30),
@Vader t_Levensnummer,
@Moeder t_Levensnummer,
@EtMoeder t_Levensnummer,
@pk_AvWSqlId Int,
@VaderId Int,
@MoederId Int,
@EtMoederId Int,
@LevensNr t_LevensNummer,
@llNew Bit,
@lcArgs VarChar(1000),
@liSource Int

Declare c_Bulkload Cursor Local For
Select r.LevensNr,d.iBlDierId,d.lDelete,d.pk_Dier,d.Naam,d.Roepnaam,
d.lBlMale,d.GeboorteDatum,d.DierSoort,d.Eigenaar,d.Vader,d.Moeder,
d.EtMoeder,s.pk_Source As iSource
From Dier d
Left Join Rund r On r.iBlDierId = d.iBlDierId
Left Join AvWSql.dbo.Source s On s.cApp = @tcSourceApp And s.cSource = d.cSource
Where d.pk_Bedrijf = @tiBedrijfId

Open c_Bulkload
Fetch Next From c_Bulkload
Into @LevensNr,@iBlDierId,@lDelete,@pk_Dier,@Naam,@Roepnaam,@lMale,@GeboorteDatum,@DierSoort,@Eigenaar,@Vader,@Moeder,@EtMoeder,@liSource
While @@Fetch_Status = 0
Begin
Set @liError = 0
Set @liRowCount = 0
Set @llNew = 0
-- Check eerst of dit dier wel op dit bedrijf thuishoort.
If Not @pk_Dier Is NULL And @pk_Dier > 0
Begin
Select pk_Dieren
From AvWSql.dbo.Dieren
Where pk_Dieren = @pk_Dier
And fk_Bedrijf = @tiBedrijfId

Select @liError = @@Error, @liRowCount = @@RowCount
If @liError = 0 And @liRowCount = 0
Begin
Set @pk_Dier = NULL

Update Dier
Set pk_Dier = @pk_Dier
Where iBlDierId = @iBlDierId
And pk_Bedrijf = @tiBedrijfId
End
End

Set @pk_AvWSqlId = @pk_Dier

If @lDelete Is NULL Or @lDelete = 0
Begin
Exec AvWSql.dbo.sp_GetDierId @tiBedrijfId=@tiBedrijfId,
@tcLevensNummer=@LevensNr,@tiDierId=@pk_AvWSqlId Output

-- Als een dier al bestaat met een ander Id wordt dat record
-- gebruikt, dus duplicaat deleten.
-- Hierbij moet wel het nieuwe id terug gestuurd worden.
If Not @pk_AvWSqlId Is NULL And @pk_AvWSqlId > 0 And
(@pk_Dier Is NULL Or @pk_AvWSqlId <> @pk_Dier)
Begin
Set @llNew = 1
If Not @pk_Dier Is NULL And @pk_Dier > 0
Set @lDelete = 1
End

-- Updaten of inserten alleen als er gegevens aanwezig zijn.
If Not (@LevensNr Is NULL And @Naam Is NULL And
@Roepnaam Is NULL And @lMale Is NULL And
@GeboorteDatum Is NULL And @DierSoort Is NULL And
@Eigenaar Is NULL And @Vader Is NULL And
@Moeder Is NULL And @EtMoeder Is NULL And @liSource Is NULL)
Begin
-- Bepaal eerst even de ouder-records.
Exec sp_GetParentId @tiBedrijfId = @tiBedrijfId,
@tiChildId = @pk_AvWSqlId,
@tcLevensnummer=@Vader,
@tiParentId = @VaderId Output
Exec sp_GetParentId @tiBedrijfId = @tiBedrijfId,
@tiChildId = @pk_AvWSqlId,
@tcLevensnummer=@Moeder,
@tiParentId = @MoederId Output
Exec sp_GetParentId @tiBedrijfId = @tiBedrijfId,
@tiChildId = @pk_AvWSqlId,
@tcLevensnummer=@EtMoeder,
@tiParentId = @EtMoederId Output

If @liSource Is NULL
Exec AvWSql.dbo.sp_GetSourceId
@tcApp = @tcSourceApp,
@tcSource = NULL,
@tiSourceId = @liSource Output

If Not @pk_AvWSqlId Is NULL And @pk_AvWSqlId > 0
Begin
Update AvWSql.dbo.Dieren
Set cdd202491 = @Naam,
cdd202495 = @Roepnaam,
lMale = @lMale,
ddd201695 = @GeboorteDatum,
ndd200068 = @DierSoort,
cdd202222 = @Eigenaar,
Vader = @VaderId,
Moeder = @MoederId,
Et_Moeder = @EtMoederId,
fk_Source = @liSource
Where pk_Dieren = @pk_AvWSqlId

Select @liError = @@Error,
@liRowCount = @@RowCount
End

-- Als het record nog niet bestaat gaan we het
-- toevoegen.
If @liError = 0 And @liRowCount = 0
Begin
If Not @LevensNr Is Null And @LevensNr <> ''
Begin
Set @llNew = 1

Insert Into AvWSql.dbo.Dieren
(fk_Bedrijf,cdd202491,cdd202495,lMale,
ddd201695,ndd200068,cdd202222,Vader,
Moeder,Et_Moeder,fk_Source)
Values(@tiBedrijfId,@Naam,@Roepnaam,
@lMale,@GeboorteDatum,@DierSoort,
@Eigenaar,@VaderId,@MoederId,
@EtMoederId,@liSource)

Select @liError = @@Error,
@pk_AvWSqlId = @@Identity,
@llNew = 1

If @liError = 0 And
Not @pk_AvWSqlId Is NULL And
@pk_AvWSqlId > 0
Begin
Insert Into AvWSql.dbo.Rundvee
(fk_Dieren, cdd204100)
Values(@pk_AvWSqlId, @LevensNr)

Select @liError = @@Error
End
End
Else
Begin
Set @lcArgs = ''
If @Naam <> ''
Set @lcArgs = RTrim(@Naam)
If @RoepNaam <> ''
If @lcArgs <> ''
Set @lcArgs = @lcArgs
+ ' (' +
RTrim(@RoepNaam) + ')'
Else
Set @lcArgs =
RTrim(@RoepNaam)

If @lcArgs <> ''
Exec sp_SetUpdateResult
@tiBedrijfId=@tiBedrijfId,
@tcLanguage=@tcLangDown,
@tcKey='Geen levensnummer bekend',
@tcArg=@lcArgs
End
End

If @liError = 0 And @llNew = 1 And
Not @pk_AvWSqlId Is NULL And @pk_AvWSqlId > 0
Update Dier
Set pk_Dier = @pk_AvWSqlId,
lBlNew = @llNew
Where pk_Bedrijf = @tiBedrijfId
And iBlDierId = @iBlDierId
End
End

If @liError = 0 And @lDelete = 1 And
Not @pk_AvWSqlId Is NULL And @pk_AvWSqlId > 0
Begin
Delete From AvWSql.dbo.Dieren
Where pk_Dieren = @pk_AvWSqlId
And fk_Bedrijf = @tiBedrijfId

Set @liError = @@Error
End

If @liError <> 0
Begin
Exec sp_SetProcessError @tiBedrijfId = @tiBedrijfId,
@tcLanguage = @tcLangDown, @tcOnderdeel = 'Dier',
@tiBlDierId = @pk_AvWSqlId, @tiError = @liError
End

Fetch Next From c_Bulkload
Into @LevensNr,@iBlDierId,@lDelete,@pk_Dier,@Naam,@Roepnaam,@lMale,@GeboorteDatum,@DierSoort,@Eigenaar,@Vader,@Moeder,@EtMoeder,@liSource
End

Close c_Bulkload
Deallocate c_Bulkload
GO
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform