Visual Basic - Retornar valor de un Procedimiento Almacenado (ADO)

Life is soft - evento anual de software empresarial
 
Vista:

Retornar valor de un Procedimiento Almacenado (ADO)

Publicado por Luis (1 intervención) el 17/06/2016 20:16:16
Que tal, muy Buenas!

Verán tengo un programa echo en VB 6, el cual maneja un Inventario de productos! La cuestión es que tengo un método en el cual realizo varias operaciones hacia la BD en el mismo método.

Realizo procedimientos almacenados por cada inserción y actualización de datos, pero lo que quiero hacer ahora es comprobar que mi primer procedimiento de insertar funciona bien, para luego realizar la segunda inserción, y si esta inserción es correcta, realizar una tercera inserción y así hasta que termine todas las inserciones de mi método. Y si por algún motivo no funciona alguna de ellas, que mi método no inserte NADA; para realizar los métodos almacenados estoy utilizando: BeginTrans, Execute, RollbackTrans y CommitTrans.

Lo que investigue es que, "Execute RecordsAffected" me devuelve el valor de las filas afectadas -siempre y cuando este bien la función. Pero funciona bien para un Select, y yo quisiera hacer esto mismo pero para un Insert y un Update.

Adjunto el código para que se entienda mejor.

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Private Sub cmdsave_Click()
	Dim local_connection As ADODB.Connection
	Dim lngRecs As Long
 
	Set local_connection = CreateObject("ADODB.Connection")
	local_connection.Open "PROVIDER=MSDASQL;dsn=namedb;uid=user;pwd=password;"
 
	local_connection.BeginTrans
    sql1 = "insert into cylinder (no, date, date_string, "
    sql1 = sql1 & " cus_no, req_no, mode, bill_items, status) values "
    sql1 = sql1 & " ( " & Format(mdate, "yyyy-mm-dd") & "' , '" & CDate(mdate) & "', "
    sql1 = sql1 & " '" & Format(mdate, "yyyy-mm-dd") & "', " & val(StatusBar1.Panels(3)) & ","
    sql1 = sql1 & " " & val(SBar1(4).Text) & ", '" & SBar1.(6) & "','" & val(filled_grid.Rows) & "', 'PENDING')"
 
    local_connection.Execute sql1, RecordsAffected := lngRecs  '//Aca es donde retorna un 0 si afecto nada o el numero de filas que afecto
 
    If lngRecs = 0 Then 'si no afecto ninguna fila
        MsgBox "Cylider no created", vbExclamation, "Cylinder"
        local_connection.RollbackTrans
        Exit Sub
 
    Else '//si funciono, seguir insertando	
 
		sql2 = "insert into cylinder2 (no, date, date_string, "
		sql2 = sql2 & " cus_no, req_no, mode, bill_items, status) values "
		sql2 = sql2 & " ( " & Format(mdate, "yyyy-mm-dd") & "' , '" & CDate(mdate) & "', "
		sql2 = sql2 & " '" & Format(mdate, "yyyy-mm-dd") & "', " & val(StatusBar1.Panels(3)) & ","
		sql2 = sql2 & " " & val(SBar1(4).Text) & ", '" & SBar1.(6) & "','" & val(filled_grid.Rows) & "', 'PENDING')"
 
		local_connection.Execute sql2, RecordsAffected:=lngRecs '//Aca es donde retorna un 0 si afecto nada o el numero de filas que afecto
 
			If lngRecs = 0 Then 'si no afecto ninguna fila
				MsgBox "Cylider 2 no created", vbExclamation, "Cylinder"
				local_connection.RollbackTrans
				Exit Sub
			Else
			'// y asi sucesivamente hasta que termine de insertar todos mis datos
			End If
    End If
 
local_connection.CommitTrans
Set local_connection = NothingExit Sub
End Sub

Que propiedad de ADO podría usar para saber si un procedimiento esta bien en un Update y un Insert? o de que forma podria hacerlo?

De antemano Gracias por la Ayuda!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 119
Ha disminuido 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Retornar valor de un Procedimiento Almacenado (ADO)

Publicado por Christian (713 intervenciones) el 25/06/2016 19:53:19
Yo crearía un stored en base con todos los insert y que reciba los parámetros necesarios.
El begin tran esta perfecto, pero si querés también que lo resuelva la base.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar