Har skapat en stored procedure... ser ut så här Du kan anväder dig av Command objektet: Jag tackar så jätte mycket!!! Lite enklare med refresh! Enklare ja, snyggare nej, sämre prestanda DEFINITIVT. Använd inte refresh, det är bara ren lathet. Hej. Det handlar inte om millisekunder eller tid på något vis, det handlar om att det behövs ett extra anrop till databasen vilket är onödigt. Håller med Christoffer Hedgate. Eftersom anropet sker endast en gång spelar det inte så stor roll. Om man sedan räknar antal IO som det blir när man läser ca 50 000 poster och skapar ca 500 000 i då tror jag nog att den ska orka ett extra anrop. OK, innan trodde jag bara du var lat, nu vet jag inte vad jag ska tro?Stored Procedure med OUTPUT...
------------------------------------------------------
create proc sp_addKommentar(@kmr_ID int, @kmr varchar(255), @kommentar_id int OUTPUT) as
begin tran
if @kmr_ID <> 1
update Kommentar set Kommentar = @kmr where KommentarID = @kmr_ID;
else
begin
insert into Kommentar(Kommentar) values(@kmr);
select @kommentar_id = @@Identity
end
if @@error > 0
rollback tran
else
commit tran
Go
-----------------------------------------------------
Problemet är att få in output värdet in i en variabel i VB!!!
Anropar på detta viset i VB...
-----------------------------------------------------
Dim SQL As String
Dim RS As New ADODB.Recordset
Dim test As Integer 'Här var tanken att OUTPUT skulle hamna
SQL = "sp_addKommentar " & KMID & ", " & Chr(39) & rtNotering.Text & Chr(39) & ", " & test & " "
Set RS = Conn.Execute(SQL)
-----------------------------------------------------
Vad gör jag sen?????
Kan någon hjälpa?????Sv: Stored Procedure med OUTPUT...
<code>
Dim cmd As ADODB.Command
Dim test As Integer
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = Conn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "sp_addKommentar"
cmd.Parameters.Append cmd.CreateParameter("kmr_ID", adInteger, adParamInput, , KMID)
cmd.Parameters.Append cmd.CreateParameter("kmr", adVarChar, adParamInput, 255, rtNotering.Text)
cmd.Parameters.Append cmd.CreateParameter("kommentar_id", adInteger, adParamOutput)
cmd.Execute , , adExecuteNoRecords
test = cmd.Parameters("kommentar_id").Value
</code>Sv: Stored Procedure med OUTPUT...
Uff ja, där är mycket kvar att lära sig...
//TorstenSv: Stored Procedure med OUTPUT...
<code>
Dim cmd As ADODB.Command
Dim test As Integer
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = Conn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "sp_addKommentar"
cmd.Parameters.refresh
' cmd.Parameters.Append cmd.CreateParameter("kmr_ID", adInteger, adParamInput, , KMID)
' cmd.Parameters.Append cmd.CreateParameter("kmr", adVarChar, adParamInput, 255, rtNotering.Text)
' cmd.Parameters.Append cmd.CreateParameter("kommentar_id", adInteger, adParamOutput)
cmd.Execute , , adExecuteNoRecords
test = cmd.Parameters("kommentar_id").Value
</code>
/StefanSv: Stored Procedure med OUTPUT...
Sv: Stored Procedure med OUTPUT...
Har man tråden öppen i ett par timmar, gör det inte så mycket att det går åt några extra millisekunder.
/StefanSv: Stored Procedure med OUTPUT...
Sv: Stored Procedure med OUTPUT...
Man kan ju använda sig av Refresh under utvecklingen för att se hur paramerarna skall deklareras. Kan ibland vara lite klurigt.
Men om inte parametrarna kommer förändras så är det ju ingen vinning med att använda refresh.
Känner man till vilka parametrar som finns och vilken datatyp det har.
Då tycker jag man ska använda den informationen istället för att vara lat.
Du välja ofta ett spår när man programerrar och fortsätta med det. Väljer man
att da en lättare lösning så kan det straffa sig i längden.
Anrop till databasen belastar både server och klient. Gör man det i onödan så kommer applikationen inte klara samma belastning eller slukar onödigt mycket resurser.
Refresh-metoden är ett onödigt anrop.
Det är därför jag inte använder det utan skapar parametrar manuellt. Sv: Stored Procedure med OUTPUT...
Att koden inte ser ut att göra det beror på att all kod inte är vad det ser ut att vara.
Refresh är ett bra sätt att slippa fylla sitt program med en massa kod som egentligen inte tillför speciellt mycket.
/StefanSv: Stored Procedure med OUTPUT...
> Eftersom anropet sker endast en gång spelar det inte så stor roll. Om man sedan räknar antal IO som det blir när man läser ca 50 000 poster och skapar ca 500 000 i då tror jag nog att den ska orka ett extra anrop.
Jo, det är ju väldigt vanligt att alla procedurer man kör läser 50 000 poster och skapar 500 000. Och säg inte att det är så i just det här fallet, det är inte vad det handlar om, det är generellt sett vi pratar om. Som Andreas sa, börjar man göra på ett visst sätt så fortsätter man ofta med det. För att inte tala om alla nybörjare som ser din kod och tror det är det bästa sättet.
> Att koden inte ser ut att göra det beror på att all kod inte är vad det ser ut att vara.
Que?
> Refresh är ett bra sätt att slippa fylla sitt program med en massa kod som egentligen inte tillför speciellt mycket.
Nu måste du väl ändå skoja? Du tror väl inte att programmet blir snabbare eller något pga att du använder Refresh istället för att skriva ut parametrarna? Dessutom är det ju betydligt mycket lättare att förstå kod där man skriver ut exakt vad man gör klart och tydligt, än om man använder ex. Refresh.
Lathet är aldrig bra.