FoxPro/Visual FoxPro - Una consulta sobre mysql odbc

 
Vista:

Una consulta sobre mysql odbc

Publicado por es_binario (757 intervenciones) el 07/12/2012 02:07:09
Que tal, estoy usando Foxpro con mysql, pero me he dado cuenta que en una consulta que implica realizarla sobre una tabla que contiene cerca de 100 mil registros la consulta demora un par de segundos, algo absurdo si gustan, pero el caso es que me devuelve un cursor digamos con 50 registros resultado de la consulta...

Pero lo importante y lo que me ha llamado mucho al atencion es que en java no me demora nada, como si fuese foxpro con una dbf nativa...

es decir la misma consulta en java con netbeans, exactamente igual incluso la lleno con un for en java... y el resultado de la consulta es abrumadoramente mas alto...

la cuestion es la siguiente, yo le hecho la culpa al hecho de que me conecto por odbc, pero no sé si alguno de uds. le ha pasado algo asi, y ha descubierto como acelerar las consultas o la creacion de cursores que contienen el resultado de la consulta en foxpro...

saludos.

En java...

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
String[] titulos = {"idProducto", "NombreProducto", "EstiloProducto", "ColorProducto","MaterialProducto", "P PAR"};
        String[] registro = new String[6]; // numero de individuos
        String sSql = "SELECT p.idproducto, c.nombrecolor, m.nombremarca,p.estiloproducto, p.tallaproducto, p.ppar "
                + " FROM producto p inner join color c on p.colorproducto = c.idcolor "
                + " inner join marca m on p.marca = m.idmarca where ppar < 150 and existencia > 0 limit 60; ";
        Modelo = new DefaultTableModel(null, titulos);
 
        ConexionMySQL mySql = new ConexionMySQL();
        Connection conn = mySql.Conectar();
 
        try {
            Statement st = conn.createStatement();
            ResultSet rs = st.executeQuery(sSql);
            if(rs.next()){
                 do{
                     if(rs!=null){
                         registro[0] = rs.getString("p.idproducto");
                         registro[1] = rs.getString("c.nombrecolor");
                         registro[2] = rs.getString("m.nombremarca");
                         registro[3] = rs.getString("p.estiloproducto");
                         registro[4] = rs.getString("p.tallaproducto");
                         registro[5] = rs.getString("p.ppar");
                         Modelo.addRow(registro);;
                     }else{
                         break;
                     }
                 }while(rs.next());
            GridConsultaColores.setModel(Modelo);
 
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex);
        }



casi un segundo mas lenta... En foxpro 9

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
TEXT TO sSqlcmd NOSHOW
   SELECT p.idproducto, c.nombrecolor, m.nombremarca,
   p.estiloproducto, p.tallaproducto, p.ppar
   FROM producto p inner join color c on p.colorproducto = c.idcolor
   inner join marca m on p.marca = m.idmarca where ppar < 150 and existencia > 0 limit 60;
ENDTEXT
 
 
Con = SQLSTRINGCONNECT(strconn)
IF Con > 0
	*// WAIT WINDOW "Conexión realizada con Exito...!" TIMEOUT 0.02
	cmd = SQLEXEC(Con, sSqlcmd,"cur_roomtype")
 	IF cmd > 0
 		Thisform.grilla1.RecordSource = "cur_roomtype"
 	ELSE
  		AERROR(laErr)
 	 MESSAGEBOX("No se pudo conectar a mySQL. Error: " + CHR(13) + laErr[2])
 	ENDIF
ENDIF
 
CATCH
MESSAGEBOX("Ocurrio un Error al Conectar",48,"Error...!!!")
RETURN
ENDTRY
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

Una consulta sobre mysql odbc

Publicado por Saul (728 intervenciones) el 07/12/2012 20:17:03
Hola.. ..

Mira lo que veo es que en Java te estas conectando

ConexionMySQL mySql = new ConexionMySQL();

Y esto es una instancia, lo que hace básicamente es llamar una base de datos que ya este conectada.
Y java recuerda es mucho mas poderoso para conectase con base de datos que vfp

ahora bien. en visual fox te recomiendo que te conectes primero.. y luego solo llama tu conexión
obviamente solo hará la instancia
quedaria algo asi..

PRG.. que se conecta al inicio..

*- Procedimiento para conectar tu data..
PROCEDURE ConexionMySQL

Public cmd

SERVERMYSQL = "LocalHost"
USUARIO = "root"
CLAVE = "sa"
BD = "Midata"


lcStringCnxLocal = "DRIVER={MySQL ODBC 3.51 Driver};" + ;
"SERVER="+SERVERMYSQL+";" + ;
"UID="+USUARIO+";" + ;
"PWD="+CLAVE+";" + ;
"DATABASE="+BD+";" + ;
"OPTIONS='';"

SQLSETPROP(0,"DispLogin" , 3 )

cmd = SQLSTRINGCONNECT(lcStringCnxLocal)

IF CnxSde < 0
AERROR(laErr)
MESSAGEBOX("No se pudo conectar a mySQL. Error: " + CHR(13) + laErr[2])

CLEAR ALL
CLOSE ALL
CANCEL
QUIT
ENDIF

ENDPROC

Luego llamas en tu procemiento y tu FORM


TEXT TO sSqlcmd NOSHOW
SELECT p.idproducto, c.nombrecolor, m.nombremarca,
p.estiloproducto, p.tallaproducto, p.ppar
FROM producto p Left join color c on p.colorproducto = c.idcolor
Left join marca m on p.marca = m.idmarca where ppar < 150 and existencia > 0 limit 60;
ENDTEXT


cmd = SQLEXEC(Con, sSqlcmd,"cur_roomtype")

SELECT cur_roomtype
IF RECCOUNT() > 0
Thisform.grilla1.RecordSource = "cur_roomtype"
ELSE
MESSAGEBOX("Disculpe no hay datos a mostrar")
ENDIF


**- Se desconecta la Conecion MySQL
=SQLDISCONNECT(CnxSde)


Saludos y suerte..
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

Una consulta sobre mysql odbc

Publicado por es_binario (757 intervenciones) el 09/12/2012 19:39:23
Muhas gracias efectivamente era eso, no lo puedo creer es el tiempo que toma conectarse con mysql, pero en realidad el odbc responde de maravilla, muchas gracias.
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