Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

type mismatch '3464'

Estas en el tema de type mismatch '3464' en el foro de Visual Basic clásico en Foros del Web. hola a todos, es que tuve unos problemas de librerias y se me borraron librerias, volvi instale el visual studio 6, pero el siguiente problema ...
  #1 (permalink)  
Antiguo 16/10/2006, 14:21
 
Fecha de Ingreso: septiembre-2006
Mensajes: 13
Antigüedad: 17 años, 7 meses
Puntos: 0
type mismatch '3464'

hola a todos, es que tuve unos problemas de librerias y se me borraron librerias, volvi instale el visual studio 6, pero el siguiente problema que me sale es que tengo una base de datos con un table llamada Item adentro tengo 5 campo: itemID (autoincrement), itemName, itemnumber, item description (text), itemquantity, itemprice(number)

bueno pues cuando voy al project, tengo un form de busqueda con el siguiente codificacion:


Private Sub cmdok_Click()
' Buscar el primer registro que coincida con el dato buscado
finddata = Text2.Text
BuscarI
Unload Me
End Sub

Private Sub cmdsearch_Click()
valor = 0
'
' Formar la cadena de la consulta:
' Se busca por el nombre del autor y se muestran clasificados por el nombre
sBuscar = "SELECT * FROM Item WHERE itemName LIKE '" & Text7 & "' ORDER BY itemID"
' Creamos un recordset del tipo "estático", el cual no es modificable
' para poder modificarlo, tendría que ser del tipo dbOpenDynamic
Set tRs = db.OpenRecordset(sBuscar, dbOpenDynaset)
' Comprobar que hay datos en el recordset
With tRs
' Si no hay datos...
If (.BOF And .EOF) Then
MsgBox "No se han encontrado los datos buscados"
Else
' Mostrar los datos hallados
ListView1.ListItems.Clear
.MoveFirst
Do While Not .EOF
Set tLi = ListView1.ListItems.Add(, , .Fields("itemID") & "")
tLi.SubItems(1) = .Fields("itemNumber") & ""
tLi.SubItems(2) = .Fields("itemName") & ""
tLi.SubItems(3) = .Fields("itemDescription") & ""
tLi.SubItems(4) = .Fields("itemQuantity") + valor
tLi.SubItems(5) = .Fields("itemPrice") + valor
.MoveNext
Loop
End If
End With
End Sub

Private Sub Form_Load()
Const sPathBase As String = "db.mdb"
Set db = OpenDatabase(sPathBase)
Set rs = db.OpenRecordset("SELECT * FROM Item", dbOpenDynaset)
With ListView1
' El tipo de Listview que queremos es del tipo "reporte"
.View = lvwReport
' Que muestre las líneas de separación entre datos
.GridLines = True
' Que no se puedan modificar los datos del listview
.LabelEdit = lvwManual
' Añadimos las cabeceras
.ColumnHeaders.Add , , "ID", 600
.ColumnHeaders.Add , , "Number", 950
.ColumnHeaders.Add , , "Name", 1000, lvwColumnRight
.ColumnHeaders.Add , , "Description", 1500, lvwColumnRight
.ColumnHeaders.Add , , "Quantity", 950
.ColumnHeaders.Add , , "Price", 820

End With
End Sub

Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)
Dim tRs As Recordset
Dim tLi As ListItem
Set tRs = db.OpenRecordset("SELECT * FROM Item", dbOpenDynaset)
Text2.Text = Item.Text
End Sub

Private Sub Text2_KeyPress(KeyAscii As Integer)
' Se buscará sólo cuando pulsemos INTRO
'
' Comprobar si la tecla pulsada es Intro: vbKeyReturn o 13 que es lo mismo
If KeyAscii = vbKeyReturn Then
On Error Resume Next
' Esta asignación evita que suene un BEEP
KeyAscii = 0
'
cmdok_Click
End If
End Sub

Private Sub Text7_KeyPress(KeyAscii As Integer)
' Se buscará sólo cuando pulsemos INTRO
'
' Comprobar si la tecla pulsada es Intro: vbKeyReturn o 13 que es lo mismo
If KeyAscii = vbKeyReturn Then
On Error Resume Next
' Esta asignación evita que suene un BEEP
KeyAscii = 0
'
cmdsearch_Click
End If
End Sub


este form no me da problema pero tengo el form de facturar co nel siguiente codigo muy semejante al de arriba:

Private Sub Combo2_Click()
'aqui quiero poner el codigo que cuando le de click ensima de el elemento en el combobox me tire el ID al TextBox del item seleccionado
Text1.Text = Form8.Combo2.ItemData(Form8.Combo2.ListIndex)
End Sub

Private Sub cmd_add_item_Click()
valor = 0
'
' Formar la cadena de la consulta:
' Se busca por el nombre del autor y se muestran clasificados por el nombre
sBuscar = "SELECT * FROM Item WHERE itemID LIKE '" & Text1 & "' ORDER BY itemID"
' Creamos un recordset del tipo "estático", el cual no es modificable
' para poder modificarlo, tendría que ser del tipo dbOpenDynamic
Set tRs = db.OpenRecordset(sBuscar, dbOpenDynaset)
' Comprobar que hay datos en el recordset
With tRs
' Si no hay datos...
If (.BOF And .EOF) Then
MsgBox "No se ha podido añadir el siguiente articulo."
Else
' Mostrar los datos hallados
' ListView1.ListItems.Clear
.MoveFirst
Do While Not .EOF
Set tLi = ListView1.ListItems.Add(, , .Fields("itemID") & "")
tLi.SubItems(1) = .Fields("itemNumber") & ""
tLi.SubItems(2) = .Fields("itemName") & ""
tLi.SubItems(3) = .Fields("itemDescription") & ""
tLi.SubItems(4) = .Fields("itemQuantity") + valor
tLi.SubItems(5) = .Fields("itemPrice") + valor
precio = .Fields("itemPrice") + valor
.MoveNext
Loop
End If
End With
preciototal = Text2.Text
Text2.Text = preciototal + precio
End Sub

Private Sub cmd_delete_item_Click()
If Not ListView1.SelectedItem Is Nothing Then
If MsgBox("Eliminar?", vbQuestion + vbYesNo) = vbYes Then
precio2 = ListView1.SelectedItem.ListSubItems(5)
ListView1.ListItems.Remove (ListView1.SelectedItem.Index)
preciototal2 = Text2.Text
Text2.Text = preciototal2 - precio2
' ListView1.Sorted = True
End If
End If
If ListView1.SelectedItem Is Nothing Then
MsgBox "List Empty."
End If
End Sub

Private Sub Form_Load()
Const sPathBase As String = "db.mdb"
Set db = OpenDatabase(sPathBase)
Set rs = db.OpenRecordset("SELECT * FROM User", dbOpenDynaset)
Set Item = db.OpenRecordset("SELECT * FROM Item", dbOpenDynaset)
Set adr = db.OpenRecordset("SELECT * FROM Adress", dbOpenDynaset)
MostrarRegistroFacturar
MostrarRegistroitems
MostrarRegistroadress
Calendar1.Visible = False
'añnadir la fecha de hoy al siguiente listbox
List2.AddItem (Format(Calendar1, "d" & "/" & "m" & "/" & "yyyy"))
With ListView1
' El tipo de Listview que queremos es del tipo "reporte"
.View = lvwReport
' Que muestre las líneas de separación entre datos
.GridLines = True
' Que no se puedan modificar los datos del listview
.LabelEdit = lvwManual
' Añadimos las cabeceras
.ColumnHeaders.Add , , "ID", 600
.ColumnHeaders.Add , , "Number", 900
.ColumnHeaders.Add , , "Name", 1000, lvwColumnRight
.ColumnHeaders.Add , , "Description", 1500, lvwColumnRight
.ColumnHeaders.Add , , "Quantity", 900
.ColumnHeaders.Add , , "Price", 700
End With
Text2.Text = 0
End Sub


las declaraciones estan global en un modulo:

Option Explicit
Global userloginbackup, userlogin, userpass As String
Global db As Database
Global rs, Item, adr, User As Recordset
Global nReg As Long
Global sBookmark As String
Global sBuscar As String
Global tRs As Recordset
Global tLi As ListItem
Global valor As String
Global finddata As String
Global calc1, calc2, precio, preciototal, precio2, precio2total As Double
Global reportlogin, reporttime As String



bueno lo que sucede es que me funcionada pero cuando reinstale el vb6 studio ahora me sucede el problema y el error es la siguiente:


Run-time error '3464':
Data Type mismatch in criteria expression.
Line: Set tRs = db.OpenRecordset(sBuscar, dbOpenDynaset)

me esta bien raro porque este codigo y esta misma linea la tengo en otro form llamado inventariosearch del primer codigo y no me tira error. pero le cambia una sola linea la cual es: sBuscar = "SELECT * FROM Item WHERE itemName LIKE '" & Text7 & "' ORDER BY itemID"

esta busca en el texto com ostring y el campo de la base de datos de itemname es text

pero en facturar form tengo esta linea: sBuscar = "SELECT * FROM Item WHERE itemID LIKE '" & Text1 & "' ORDER BY itemID"

el campo de itemId es autonumber y la variable sBuscar es string pues no me esta buscando. me podrian ayudar se los voy a agradecer.
  #2 (permalink)  
Antiguo 16/10/2006, 14:50
 
Fecha de Ingreso: noviembre-2004
Ubicación: Corrientes, Arg.
Mensajes: 129
Antigüedad: 19 años, 5 meses
Puntos: 0
Type mismatch...

Bueno... hasta donde yo sé, las comparaciones con campos numéricos no llevan el apóstrofe (o comilla simple).
Revisá un poco eso. Vos decís que itemID es un autonumérico, que por defecto suelen ser tipo Long, y lo estás comparando contra una string. Puede ser que por ahí venga la cosa. La parte en que ponés
"SELECT * FROM Item WHERE itemID LIKE '" & Text1 & "' ORDER BY itemID"
yo la pondría
"SELECT * FROM Item WHERE itemID LIKE " & Text1 & " ORDER BY itemID"
Espero que sea solamente eso.
Pero por otro lado creo que LIKE no es lo totalmente apropiado para números, ¿porqué no probás con
"SELECT * FROM Item WHERE itemID = " & Text1 & " ORDER BY itemID"?
Suerte.
  #3 (permalink)  
Antiguo 16/10/2006, 20:02
 
Fecha de Ingreso: septiembre-2006
Mensajes: 13
Antigüedad: 17 años, 7 meses
Puntos: 0
Me escribio esto:

"SELECT * FROM Item WHERE itemID LIKE '" & Text1 & "' ORDER BY itemID"
yo la pondría
"SELECT * FROM Item WHERE itemID LIKE " & Text1 & " ORDER BY itemID"
Espero que sea solamente eso.


Fue muy amable de su parte, funciono totalmente correcto.
Bueno Hasta el momento que llevo esta es la unica web que me ha resolvido las dudas y problemas. gracias nuevamente.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:03.