Hola, como puedo Relacionar 2 Recordset de dos tablas distintas ?
Tengo 2 Tablas:
INVENTARIO
con _: Codigo, Descripcion y Linea
LINEAS
con _: Linea y Descripcion
Necesito que en Listbox que en lugar de poner el campo Linea, ponga el Nombre que le corresponde de la tabla LINEAS
oCone :=tOleAuto():new("ADODB.connection")
oCone:Open( "DRIVER={MySQL ODBC 3.51 Driver};" + ;
"server=" + cServer + ;
";database=" + cDatabase + ;
";uid=" + cUser + ;
";port=" + cPort + ;
";pwd=" + cPass )
oRecordSet := TOleAuto():New("adodb.recordset")
oComando := TOLEAUTO():New("adodb.command")
oRecordSet:CursorType := 1 // opendkeyset
oRecordSet:CursorLocation := 3 // local cache
oRecordSet:LockType := 3 // lockoportunistic
oRecordSet:ActiveConnection(oCone)
oRecordSet:Source := "Select * from Inventario Order by Codigo"
oRecordSet:Open()
oRecordSet:MoveFirst()
oRecordSet2 := TOleAuto():New("adodb.recordset")
oComando := TOLEAUTO():New("adodb.command")
oRecordSet2:CursorType := 1 // opendkeyset
oRecordSet2:CursorLocation := 3 // local cache
oRecordSet2:LockType := 3 // lockoportunistic
oRecordSet2:ActiveConnection(oCone)
oRecordSet2:Source := "Select * from Lineas Order by Linea"
oRecordSet2:Open()
DEFINE WINDOW oWndChild MDICHILD OF oWnd FROM 1, 1 To 35, 118 TITLE "Catalodo de Inventario"
DEFINE BUTTONBAR oBar _3D OF oWndChild SIZE 42, 42
TWBrowse():lHScroll:= .F.
@ 3.5, .5 LISTBOX oLbx FIELDS Transform(oRecordSet:Fields("Codigo"):value,"999999"), oRecordSet:Fields("Descripcion"):value,oRecordSet:Fields("Linea"):value;
HEADERS "Codigo", "Descripcion","Marca","Modelo","Serie","Linea","Sucursal","Ubicacion","Proveedor";
FIELDSIZES 80,180,80;
SIZE 500, 350 OF oWndchild;
actualmente hace esto:
1001 Refrigerador 1
Necesito que sea:
1001 Refrigerador REFRIGERACION
Espero haberme explicado correctamente, gracias.
Relecionar RecordSet
Re: Relecionar RecordSet
Creo que esa consulta la puedes hacer directo a la base de datos, con la relación que necesitas y la muestras en un solo recorset, creo que así te podría funcionar.
Lo único es revisar los nombres de _ de cada una de las tablas, yo coloque los que venían en el POST, asumiendo que sean esos.
Que versión de FW usas? por que ese código se puede simplificar mucho mas con las funcione de fw, para el manejo de ADO
Code: Select all | Expand
oCone :=tOleAuto():new("ADODB.connection")
oCone:Open( "DRIVER={MySQL ODBC 3.51 Driver};" + ;
"server=" + cServer + ;
";database=" + cDatabase + ;
";uid=" + cUser + ;
";port=" + cPort + ;
";pwd=" + cPass )
oRecordSet := TOleAuto():New("adodb.recordset")
oComando := TOLEAUTO():New("adodb.command")
oRecordSet:CursorType := 1 // opendkeyset
oRecordSet:CursorLocation := 3 // local cache
oRecordSet:LockType := 3 // lockoportunistic
oRecordSet:ActiveConnection(oCone)
oRecordSet:Source := "SELECT INV.*,LNA.descripcion AS des_linea FROM inventario INV LEFT JOIN lineas LNA ON INV.linea=LNA.linea ORDER BY INV.codigo"
oRecordSet:Open()
oRecordSet:MoveFirst()
@ 3.5, .5 LISTBOX oLbx FIELDS Transform(oRecordSet:Fields("Codigo"):value,"999999"), oRecordSet:Fields("Descripcion"):value,oRecordSet:Fields("des_linea"):value;
HEADERS "Codigo", "Descripcion","Marca","Modelo","Serie","Linea","Sucursal","Ubicacion","Proveedor";
FIELDSIZES 80,180,80;
SIZE 500, 350 OF oWndchild;
Que versión de FW usas? por que ese código se puede simplificar mucho mas con las funcione de fw, para el manejo de ADO
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com
[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com
[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
-
- Posts: 192
- Joined: Fri Nov 18, 2005 7:34 pm
Re: Relecionar RecordSet
Tabla 1
INVENTARIO
Codigo --->1001
Descripcion --->REFRIGERADOR LG 19
Linea --->1
Tabla 2
LINEAS
id --->1
Linea --->REFRIGERACION
oRecordSet:Source := "SELECT INV.*,LNA.Linea AS des_linea FROM inventario INV LEFT JOIN lineas LNA ON INV.linea=LNA.Id ORDER BY INV.codigo"
No se puede conectar me envia un mensaje de conexion:
Error adodb.recordset/16389 E_FAIL: OPEN
Puse algo mal ?
en Listbox debe de quedar
Codigo Descripcion Linea
1001 REFRIGERADOR LG 19 REFRIGERACION
INVENTARIO
Codigo --->1001
Descripcion --->REFRIGERADOR LG 19
Linea --->1
Tabla 2
LINEAS
id --->1
Linea --->REFRIGERACION
oRecordSet:Source := "SELECT INV.*,LNA.Linea AS des_linea FROM inventario INV LEFT JOIN lineas LNA ON INV.linea=LNA.Id ORDER BY INV.codigo"
No se puede conectar me envia un mensaje de conexion:
Error adodb.recordset/16389 E_FAIL: OPEN
Puse algo mal ?
en Listbox debe de quedar
Codigo Descripcion Linea
1001 REFRIGERADOR LG 19 REFRIGERACION
-
- Posts: 192
- Joined: Fri Nov 18, 2005 7:34 pm
Re: Relecionar RecordSet
ya logré hacer la relación:
oRecordSet:Source := "SELECT INV.*,LNA.linea AS des_linea FROM inventario INV LEFT JOIN Lineas LNA ON INV.linea=LNA.ID ORDER BY INV.codigo" ///Conexion OK
Si necesito relacionar mas, seria separado por una , ?
LNA.linea AS des_linea, SUC.sucursal AS des_sucursal FROM inventario INV LEFT JOIN Lineas LNA ON INV.linea=LNA.ID, LEFT JOIN Sucursal SUC ON INV.Sucursal=SUC.ID ORDER BY INV.codigo
O como seria la sintaxis ?
Saludos y muchísimas gracias por su ayuda.
oRecordSet:Source := "SELECT INV.*,LNA.linea AS des_linea FROM inventario INV LEFT JOIN Lineas LNA ON INV.linea=LNA.ID ORDER BY INV.codigo" ///Conexion OK
Si necesito relacionar mas, seria separado por una , ?
LNA.linea AS des_linea, SUC.sucursal AS des_sucursal FROM inventario INV LEFT JOIN Lineas LNA ON INV.linea=LNA.ID, LEFT JOIN Sucursal SUC ON INV.Sucursal=SUC.ID ORDER BY INV.codigo
O como seria la sintaxis ?
Saludos y muchísimas gracias por su ayuda.
Re: Relecionar RecordSet
Hola buenos días como estas?
Que bueno que lo hayas resuelto
Seria así
Que bueno que lo hayas resuelto
Seria así
Code: Select all | Expand
SELECT INV.*,LNA.linea AS des_linea, SUC.sucursal AS des_sucursal FROM (inventario INV LEFT JOIN Lineas LNA ON INV.linea=LNA.ID) LEFT JOIN Sucursal SUC ON INV.Sucursal=SUC.ID ORDER BY INV.codigo
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com
[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com
[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
Re: Relecionar RecordSet
Servicomver:
A ver si este código te da más luz, puedes tener tanos JOINs como necesites
En este código tengo una tabla (CARCXP) relacionada a dos tablas más (PROVEEDORES y PROYECTOS)
Otro ejemplo más, aunque probablemente ya lo sabes, fíjate que en la selección de campos solo defino
los estrictamente necesarios, no siempre debe ser * (Todos _).
Sugerencia, tírale un ojo a los JOINs (tienes LEFT JOIN,INNER JOIN, RIGHT JOIN) para ver cual es la diferencia.
Saludos
A ver si este código te da más luz, puedes tener tanos JOINs como necesites
Code: Select all | Expand
oRsCxp := FW_OpenRecordSet(oApp:oCon,"SELECT " +;
"*," +;
"PRO_NOM," +;
"PRO_DES " +;
"FROM " +;
"CarCxp " +;
"LEFT JOIN " +;
"Proveedores " +;
"ON " +;
"CAR_PRV = Proveedores.PRO_NUM " +;
"LEFT JOIN " +;
"Proyectos " +;
"ON " +;
"CAR_PRO = PRO_PRO " +;
"WHERE " + ;
"CAR_SDO > 0.00 " +;
"AND " +;
"! CAR_CAN " +;
"ORDER BY " +;
"CAR_FAC",adLockOptimistic,adOpenDynamic,0)
Otro ejemplo más, aunque probablemente ya lo sabes, fíjate que en la selección de campos solo defino
los estrictamente necesarios, no siempre debe ser * (Todos _).
Code: Select all | Expand
oRsHdr := FW_OpenRecordSet(oApp:oCon,"SELECT " +;
"*," +;
"PRO_NOM," +;
"PRO_CLI," +;
"PRO_DES," +;
"CLI_NOM " +;
"FROM " +;
"HdrCdg " +;
"LEFT JOIN " +;
"Proveedores " +;
"ON " +;
"HDR_PRV = PRO_NUM " +;
"LEFT JOIN " +;
"Proyectos " +;
"ON " +;
"HDR_PRO = PRO_PRO " +;
"LEFT JOIN " +;
"Clientes " +;
"ON " +;
"PRO_CLI = CLI_NUM " +;
"WHERE " +;
"YEAR(HDR_FDE) = '" + STR(nAmo,4,0) + "' " +;
"ORDER BY " +;
"HDR_FOL",adLockOptimistic,adOpenDynamic,0)
Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero