Visual Basic - Consulta SQL

Life is soft - evento anual de software empresarial
 
Vista:

Consulta SQL

Publicado por Antonio (93 intervenciones) el 22/03/2009 17:55:40
Como podría hacer la siguiente actualización de datos directamente con SQL

'Cogemos los datos de las tablas creando los Recordset
Set TAlm = New ADODB.Recordset
With TAlm
.Open "SELECT * FROM Almacen", g_db, adOpenDynamic, adLockOptimistic
End With
'Comprobamos que exista
TAlm.Find "Codigo = '" & cCodigo & "'"
If Not TAlm.EOF Then
TAlm.Fields("Existen") = Round(TAlm.Fields("Existen") + CantiVale.Text, 2)
TAlm.Fields("PVP") = Round(PVP.Text, 3)
TAlm.Fields("Dto") = Round(Dto.Text, 2)
TAlm.Fields("IVA") = Round(Iva.Text, 2)
TAlm.Fields("PtsUni") = Round(PtsUni.Text, 3)
End If
TAlm.Update
TAlm.Requery
'Cerramos los Recordset
TAlm.Close
Set TAlm = Nothing
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

RE:Consulta SQL

Publicado por P3L30N2009 (699 intervenciones) el 22/03/2009 19:05:03
Abres el recordset:
"Select * From Almacen Where Codigo = '" & cCodigo & "'"
If recordset.RecordCount > 0 Then
conexion.Execute "UPDATE Almacen SET Existen = '" & Round(TAlm.Fields("Existen") + CantiVale.Text, 2) & "', PVP = '" & Round(PVP.Text, 3) & "', ... sigo??

End If
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

RE:Consulta SQL

Publicado por Antonio Belando (93 intervenciones) el 22/03/2009 20:08:47
Gracias P3L30N2009 por responder.

Como el recordset ya estaba abierto la sentencia SQL la he puesto así:
If TAlm.RecordCount > 0 Then
g_db.Execute "UPDATE Almacen SET Existen = '" & Round(TAlm.Fields("Existen") + CantiVale.Text, 2) & _
"', PVP = '" & Round(PVP.Text, 3) & "', Dto = '" & Round(Dto.Text, 2) & _
"', IVA = '" & Round(Iva.Text, 2) & _
"', PtsUni = '" & Round(PtsUni.Text, 3) & _
"' WHERE Codigo = '" & cCodigo & "'"
End If

Pero me da el siguiente error:
"Error al convertir el tipo de datos varchar a numeric"

Los tipos de los campos son:
Existen --> decimal (8,2)
PVP --> decimal (11,3)
Dto --> decimal (5,2)
IVA --> decimal (5,2)
PtsUni --> decimal (11,3)
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

RE:Consulta SQL

Publicado por P3L30N2009 (699 intervenciones) el 22/03/2009 20:43:43
Pues si todos los campos son numéricos (incluso el campo Codigo), quítales las comillas simples:

g_db.Execute "UPDATE Almacen SET Existen = " & Round(TAlm.Fields("Existen") + CantiVale.Text, 2) & _
", PVP = " & Round(PVP.Text, 3) & ", Dto = " & Round(Dto.Text, 2) & _
", IVA = " & Round(Iva.Text, 2) & _
", PtsUni = " & Round(PtsUni.Text, 3) & _
" WHERE Codigo = " & cCodigo
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

RE:Consulta SQL

Publicado por Antonio (93 intervenciones) el 22/03/2009 21:46:50
Hola P3L30N2009, gracias por tu ayuda y paciencia.
Con el código:
g_db.Execute "UPDATE Almacen SET Existen = " & Round(TAlm. _
Fields("Existen") + CantiVale.Text, 2) & _
", PVP = " & Round(PVP.Text, 3) & _
", Dto = " & Round(Dto.Text, 2) & _
", IVA = " & Round(Iva.Text, 2) & _
", PtsUni = " & Round(PtsUni.Text, 3) & _
" WHERE Codigo = '" & cCodigo & "'"

Codigo --> nvarchar --> 7

Ahora me da otro error:
[Microsoft][ODBC SQL Driver][SQL Server]Línea 1: sintaxis incorrecta cerca de '85'

Lo único parecido a '85', don los decimales deL campo PVP cuyo valor es 1,850 (decimal (11,3))

Saludos cordiales.
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

RE:Consulta SQL

Publicado por hector (9 intervenciones) el 23/03/2009 03:45:24
Compadre si son decimales en SQL tienes que convertir ejemplo PVP=convert.(decimal(20,4), " & texto.text & ")

el veinte dentro del decimal dignifica la presiocon del numero y el cuatro la cantidad de decimales

espero que te sirva
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

RE:Consulta SQL

Publicado por Antonio (93 intervenciones) el 23/03/2009 15:12:28
Hola Hector, gracias por responder.
He aplicado lo que me dices, según el siguiente código:
strSQL = "UPDATE Almacen SET " & vbNewLine
strSQL = strSQL & "Existen = " & "Convert(Decimal(8,2), " & Existen + CantiVale.Text & ")" & "," & vbNewLine
strSQL = strSQL & "PVP = " & "Convert(Decimal(11,3), " & PVP.Text & ")" & "," & vbNewLine
strSQL = strSQL & "Dto = " & "Convert(Decimal(5,2), " & Dto.Text & ")" & "," & vbNewLine
strSQL = strSQL & "IVA = " & "Convert(Decimal(5,2), " & Iva.Text & ")" & "," & vbNewLine
strSQL = strSQL & "PtsUni = " & "Convert(Decimal(11,3), " & PtsUni.Text & ")" & vbNewLine
strSQL = strSQL & "WHERE Codigo = '" & cCodigo & "'"
MsgBox strSQL
g_db.Execute strSQL

Con este código actualiza, pero no tiene en cuenta los decimales.
Para que sepas lo que hace este código a continuación reseño la información que ofrece en MsgBox que he intercalado:
UPDATE Almacen SET
Existen = Convert(Decimal(8,2), 24,001),
PVP = Convert(Decimal(11,3), 1,850),
Dto = Convert(Decimal(5,2), 0,00),
IVA = Convert(Decimal(5,2), 16,00),
PtsUni = Convert(Decimal(11,3), 2,146)
WHERE Codigo = ‘70000-4’

Por favor, a ver si podeis ayudarme a resolver el problema.
Saludos cordiales.
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

RE:Consulta SQL

Publicado por Antonio (93 intervenciones) el 25/03/2009 21:38:06
Me respondo:
If TAlm.RecordCount > 0 Then
strSQL = "UPDATE Almacen SET "
strSQL = strSQL & "Existen = " & Sustituye_Coma_Punto(Existen + Round(CantiVale.Text, 2)) & ","
strSQL = strSQL & "PVP = " & Sustituye_Coma_Punto(Round(PVP.Text, 3)) & ","
strSQL = strSQL & "Dto = " & Sustituye_Coma_Punto(Round(Dto.Text, 2)) & ","
strSQL = strSQL & "IVA = " & Sustituye_Coma_Punto(Round(Iva.Text, 2)) & ","
strSQL = strSQL & "PtsUni = " & Sustituye_Coma_Punto(Round(PtsUni.Text, 3))
strSQL = strSQL & " WHERE Codigo = '" & cCodigo & "'"
'Ahora mostramos la cadena, para que veas lo que realmente se está mandando a la BBDD
'MsgBox strSQL
g_db.Execute strSQL
End If

La función Sustituye_Coma_Punto facilitada por un amigo, es:
Public Function Sustituye_Coma_Punto(ByVal st As String) As String
Dim iLen As Integer
Dim i As Integer
On Error GoTo Sustituye_Coma_Punto

iLen = Len(st)

i = InStr(st, ",")
While i > 0
If i > 0 Then st = Left(st, i - 1) & "." & Right(st, iLen - i)
i = InStr(st, ",")
Wend

Sustituye_Coma_Punto = st

Exit Function
Sustituye_Coma_Punto:
Sustituye_Coma_Punto = st
End Function

Saludos cordiales.
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

RE:Consulta SQL

Publicado por P3L30N2009 (699 intervenciones) el 26/03/2009 12:20:56
Pues tu amigo se pasó con el ejemplo. Esto hace lo mismo sin tanta floritura:

Public Function Sustituye_Coma_Punto(ByVal st As String) As String
st = Replace(st, ",", ".")
Sustituye_Coma_Punto = st
End Function
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

RE:Consulta SQL

Publicado por Antonio (93 intervenciones) el 26/03/2009 19:53:07
Gracias P3L30N2009 y hasta la próxima..

Saludos cordiales.
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