browse and SQL
browse and SQL
Hola,
Cual es el mejor browse para ver tablas en SQL con conexion remota, o cual es el mejor procedimiento para hacerlo, traerme las tablas y guardarlas en DBF.
revisando lo que hacen los visores de tablas SQL, por defecto vienen configuradas para traer 50 registros, como puedo hacer eso en FWH ?
tengo tablas con 10,20, 30mil registros y se tardaran una eternidad al hacer el acceso remoto, si continuo con mis browse tradicionales.
o es mejor cambiar la programacion y no usar browse?
Gracias anticipadas.
Mauricio
Cual es el mejor browse para ver tablas en SQL con conexion remota, o cual es el mejor procedimiento para hacerlo, traerme las tablas y guardarlas en DBF.
revisando lo que hacen los visores de tablas SQL, por defecto vienen configuradas para traer 50 registros, como puedo hacer eso en FWH ?
tengo tablas con 10,20, 30mil registros y se tardaran una eternidad al hacer el acceso remoto, si continuo con mis browse tradicionales.
o es mejor cambiar la programacion y no usar browse?
Gracias anticipadas.
Mauricio
Re: browse and SQL
Mauricio, no es que el browse traiga 50 registros por defecto, sino es la clausula limit en la cadena del query. y con respecto a traer esa cantidad de registros en forma remota lo veo, al menos dificil de tolerar por el tiempo que tardaría. No podés fraccionar la información, por ejemplo yo tengo funcionando un pequeño programa de facturación, y para mostrar las facturas, lo hago en un browse, pero solo las del corriente mes por defecto. si necesitan de otros periodos ellos pueden escribir su propia sentencia. Solo ideas
salu2
salu2
Re: browse and SQL
Amigo yo lo hago con xbrowse paginado de 30 o 50 con botones de paginar
usando la metodo LIMIT 0.50
ADO+MYSQL
Saludos
usando la metodo LIMIT 0.50
ADO+MYSQL
Saludos
Re: browse and SQL
Jbrita,
podrias poner un ej. del codigo, de como lo haces ???
Gracias.
Salu2, Ariel.
podrias poner un ej. del codigo, de como lo haces ???
Gracias.
Salu2, Ariel.
- Alfredo Arteaga
- Posts: 326
- Joined: Sun Oct 09, 2005 5:22 pm
- Location: Mexico
- Contact:
Re: browse and SQL
[url=http://img121.imageshack.us/i/cas ... .jpg[/img]
[/url]
En mi caso uso xBrowse con SQLRDD y veo una buena respuesta. Una parte del código usado según imagen, es:
[/url]
En mi caso uso xBrowse con SQLRDD y veo una buena respuesta. Una parte del código usado según imagen, es:
Code: Select all
FUNCTION Open_Table(oBrw)
LOCAL oIcon, nClrB, oWChld, oLbx, oCbx
LOCAL oDbf, cDbf, aIdx, cFile, oDBas
LOCAL oPop, cVar, oB[6], cAlias , nTab
CursorWait()
nClrB:=LightColor(215,nClrM)
aIdx:={"<sin índice>"}
cVar:= "<sin índice>"
lFil:=.F.
cDbf:=Alltrim(oBrw:aArrayData[oBrw:nArrayAt,1])
cAlias:=Open_Dbf(cDbf,lData)
DATABASE oDbf
oDbf:GoTop()
nReg:=oDbf:LastRec()
DEFINE ICON oIcon RESOURCE "IconSys"
DEFINE WINDOW oWChld MDIChild TITLE cTitl OF oWnd ICON oIcon
DEFINE BUTTONBAR oBar 3DLOOK BUTTONSIZE 26,26 2007 OF oWChld
DEFINE BUTTON oB[1] OF oBar RESOURCE "B_Bus","","B_DBs" TOOLTIP "Buscar (Ctrl+B)" ;
ACTION Buscar(oCbx,oLbx,oDbf) NOBORDER
DEFINE BUTTON oB[2] OF oBar RESOURCE "B_Loc" TOOLTIP "Localizar (Ctrl+L)" ;
ACTION Localizar(oLbx,oDbf) NOBORDER
DEFINE BUTTON oB[3] OF oBar RESOURCE "B_Prt" TOOLTIP "Reportes (Ctrl+R)" GROUP ;
ACTION New_Report(oLbx) NOBORDER
DEFINE BUTTON oB[4] OF oBar RESOURCE "B_Xls" TOOLTIP "Enviar a Excel" GROUP ;
ACTION To_Excel(oLbx) NOBORDER
DEFINE BUTTON oB[5] OF oBar RESOURCE "B_Ver","","B_DVr" TOOLTIP "Ver/Ocultar registros borrados";
ACTION Desp_Del(oLbx) NOBORDER
DEFINE BUTTON oB[6] OF oBar RESOURCE "B_Fil" TOOLTIP "Filtrar por... (Ctrl+F)";
ACTION Filtrar(oLbx,oDbf,oB) NOBORDER
MENU oPop POPUP
MENUITEM "en &Mosaico" ACTION oWnd:Tile() ;
WHEN Len(oWnd:oWndClient:aWnd)>0
MENUITEM "en &Horizontal" ACTION oWnd:Tile(.T.) ;
WHEN Len(oWnd:oWndClient:aWnd)>0
MENUITEM "en &Cascada" ACTION oWnd:Cascade() ;
WHEN Len(oWnd:oWndClient:aWnd)>0
ENDMENU
DEFINE BUTTON OF oBar RESOURCE "B_Ven" TOOLTIP "Organizar ventanas" GROUP ;
ACTION oWnd:Tile() NOBORDER MENU oPop
oBar:bRClicked:={|| Que_Pasa("¿Que intentas?...")}
@ 0.25,31 COMBOBOX oCbx VAR cVar ITEMS aIdx OF oBar SIZE 150,300 ;
ON CHANGE Sel_Index(oCbx,oDbf,oLbx,oB) FONT oWChld:oFont
oCbx:cTooltip:="Clasificar..."
oBar:bPainted:={|hDC| oBar:Say( 7,400,Tran(nReg,"9999,999")+" Reg(s)",nClrM,,oWnd:oFont,.T.,.T.)}
oLbx:=TXBrowse():New(oWChld)
oLbx:nMarqueeStyle :=3
oLbx:nColDividerStyle:=4
oLbx:SetRDD()
IF DbSetDriver()="DBFCDX"
oLbx:bClrStd:={|| {IF(Deleted(),CLR_HRED,CLR_BLACK),IF((oLbx:cAlias)->(OrdKeyNo())%2==0,nClrB,CLR_LGRAY)}}
ELSE
oLbx:bClrStd:={|| {IF(Deleted(),CLR_HRED,CLR_BLACK),CLR_WHITE}}
ENDIF
oLbx:bRClicked :={|nRow,nCol| Pop_Menu(nRow,nCol,oWChld,oCbx,oLbx,oDbf,oB)}
oLbx:bKeyDown :={|nKey| Val_nKey(nKey,oLbx,oDbf,oCbx,oB)}
oLbx:CreateFromCode()
oWChld:SetControl(oLbx)
oWChld:GoTop()
ACTIVATE WINDOW oWChld VALID Close_Table(oLbx,oDbf,cDbf,cAlias)
RETURN (NIL)
STAT FUNC Close_Table(oLbx,oDbf,cDbf,cAlias)
oLbx:End()
oDbf:Close()
Close_Dbf(cDbf,cAlias)
Set(_SET_DELETED,lSetDel)
RETURN (.T.)
Re: browse and SQL
Gracias a todos,
tomare sus soluciones para intentar implementar la mia,
estoy hablando de mySQL en remoto, en local funciona perfecto, al hacer el modulo con acceso remoto se me duermen los clientes cuando descargan las tablas.
Gracias.
Mauricio
tomare sus soluciones para intentar implementar la mia,
estoy hablando de mySQL en remoto, en local funciona perfecto, al hacer el modulo con acceso remoto se me duermen los clientes cuando descargan las tablas.
Gracias.
Mauricio
Re: browse and SQL
Que estas ocupando para la conexion de tus tablas
Saludos
Saludos
Re: browse and SQL
JBrita,
TMySql
Saludos,
Mauricio
TMySql
Saludos,
Mauricio
Last edited by Mauricio on Mon Oct 05, 2009 4:15 pm, edited 1 time in total.
Re: browse and SQL
Esta bien Mauricio que Mysql, pero ocupas ADO, TMYSQL que libreria ocupas en tus sistemas
Saludos
Saludos
Re: browse and SQL
JBrita
Perdon,
ya corregi el post, pero me ganasta es TMySql
Mauricio
Perdon,
ya corregi el post, pero me ganasta es TMySql
Mauricio
Re: browse and SQL
Mauricio , ademas de paginar quieres hacer busquedas en ese browse o solo quieres mostrar
saludos
saludos
Re: browse and SQL
Hola Jbrita,
tienes algun correo de contacto, estamos usando el foro como chat y si logro dar con bola pongo la solucion aqui, asi lo demas usuarios no tienen que leerse nuestro chat.
saludos,
Mauricio
tienes algun correo de contacto, estamos usando el foro como chat y si logro dar con bola pongo la solucion aqui, asi lo demas usuarios no tienen que leerse nuestro chat.
saludos,
Mauricio
Re: browse and SQL
No, Si está de lo más entretenido!!
Jeje
Jeje
Saludos
Angel, Valencia, Venezuela
xH .997 - FW 7.9 - BCC55 - WorkShop - MySql
Angel, Valencia, Venezuela
xH .997 - FW 7.9 - BCC55 - WorkShop - MySql
Re: browse and SQL
Yo lo hago así, no se si te sirva de algo
y me trabaja bastante rápido, aunque más rápido es transferir el query a una matriz provisional
Asi
(Ya me puse serio)
Code: Select all
******************************************************************************************
FUNCTION prueba2() && Programa de prueba
******************************************************************************************
LOCAL oDlg ,;
oButSalir ,;
oTabla ,;
oLbx ,;
cTabla := "MODELO"
LOCAL cCommand,oQuery
LOCAL oControl:=colores()
LOCAL aTabla:={},aLoaded
CURSORWAIT()
cCommand :='SELECT * '+;
'FROM `'+cDTBase+'`.`'+cTabla+'` '+;
'limit 90000'
oQuery :=TMSQuery():New( oDTBase )
oQuery:Open( cCommand )
// Traemos el resultado a nuestro cliente
IF ( oQuery:nRowCount>0 )
DEFINE DIALOG oDlg RESOURCE "prueba";
TITLE 'Prueba con oQuery Directo' ;
OF oWnd
oDlg:lHelpIcon :=.f. && Apago el Icono de Help
REDEFINE LISTBOX oLbx ;
FIELDS PadL( oQuery:FieldGet( 1 ), 6, " " ),;
oQuery:xFieldGet( 3 ), ;
oQuery:xFieldGet( 4 ), ;
oQuery:xFieldGet( 5 ), ;
oQuery:xFieldGet( 6 ) ;
FIELDSIZES 45,45,190,45,45;
HEADERS "Codigo", ;
"Cod/Estado", ;
"Ciudad", ;
"Abreviatura", ;
"Cod.Area" ID 401 OF oDlg
oQuery:GoTop():Read() // No se olvide nunca de esta linea
MySetBrowse(oLbx,oQuery) // No Olvidarse Nunca de Esta Línea
oLbx:cAlias := "ARRAY" // No Olvidarse de "ESTO", si no se tranca
oLbx:lCellStyle := .f. // Apaga El estilo por celda
oLbx:nLineStyle := 3 // coloca la linea entre registros
// poner colores a las lineas
oControl:aLbxBkGClr[ 1 ] :={ || iif( oQuery:nRow %2=0, oControl:nCL_HGreen, oControl:nCD_HGreen ) }
oLbx:bTextColor :={ | nRow, nCol, nStyle | iif( nStyle>=0 .and. nStyle<=3,;
oControl:aLbxTxtClr[ nStyle+1 ],;
CLR_WHITE ) }
oLbx:bBkColor :={ | nRow, nCol, nStyle | iif( nStyle>=0 .and. nStyle<=3,;
eval( oControl:aLbxBkGClr[ nStyle+1 ] ),;
CLR_WHITE ) }
// colores hasta aqui
REDEFINE Button oButSalir ID 101 OF oDlg;
MESSAGE "Salir";
ACTION oDlg:End() && Sale de la Rutina, Por Convencion el ID es 101
oDlg:oClient := oLbx
ACTIVATE DIALOG oDlg CENTER
oQuery:close()
ELSE
MSGALERT("No se puede abrir la tabla: " + cTabla, "Operación Cancelada" )
ENDIF
RETURN NIL
Asi
Code: Select all
******************************************************************************************
FUNCTION prueba3() && Programa de prueba
******************************************************************************************
LOCAL oDlg ,;
oButSalir ,;
oTabla ,;
oLbx ,;
nReg :=0 ,;
cTabla := "MODELO"
LOCAL cCommand,oQuery,aLoaded
LOCAL aTabla[300000,5]
CURSORWAIT()
cCommand :='SELECT * '+;
'FROM `'+cDTBase+'`.`'+cTabla+'` '+;
'limit 300000'
oQuery :=TMSQuery():New( oDtBase )
oQuery:Open( cCommand )
// Traemos el resultado a nuestro cliente
IF ( oQuery:nRowCount>0 )
*MSGALERT(oQuery:nRowCount)
CURSORWAIT()
DO WHILE !oQuery:lEof
nReg +=1
aTabla[nReg,1]:=oQuery:FieldGet( 1 )
aTabla[nReg,2]:=oQuery:FieldGet( 3 )
aTabla[nReg,3]:=oQuery:FieldGet( 4 )
aTabla[nReg,4]:=oQuery:FieldGet( 5 )
aTabla[nReg,5]:=oQuery:FieldGet( 6 )
oQuery:Fetch()
ENDDO
DEFINE DIALOG oDlg RESOURCE "prueba";
TITLE 'Prueba con oQuery pasado a Arreglo'
oDlg:lHelpIcon :=.f. && Apago el Icono de Help
REDEFINE LISTBOX oLbx ;
FIELDS transform(aTabla[oLbx:nAt,1],'999'),;
aTabla[oLbx:nAt,2],;
aTabla[oLbx:nAt,3],;
aTabla[oLbx:nAt,4],;
aTabla[oLbx:nAt,5];
ID 401 OF oDlg
*oLbx:Ajustify :={1,2,0,2,2} && Justificado de Columnas 0=izq, 1=Der, 2=Cent
*oLbx:nFreeze := 3
oLbx:SetArray( aTabla )
REDEFINE BUTTON oButSalir ID 101 OF oDlg;
ACTION oDlg:End() && Sale de la Rutina, Por Convencion el ID es 101
oDlg:oClient := oLbx
ACTIVATE DIALOG oDlg CENTER
oQuery:close()
ELSE
MSGALERT("No se puede abrir la tabla: " + cTabla, "Operación Cancelada" )
ENDIF
RETURN NIL
Saludos
Angel, Valencia, Venezuela
xH .997 - FW 7.9 - BCC55 - WorkShop - MySql
Angel, Valencia, Venezuela
xH .997 - FW 7.9 - BCC55 - WorkShop - MySql
Re: browse and SQL
Hola Blanco,
Gracias por voy a probar tu solucion,
(copy / paste )
saludos,
Mauricio
Gracias por voy a probar tu solucion,
(copy / paste )
saludos,
Mauricio