In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Migrar sistema em DBF para MySql

Foro público de Xailer en español
Responder
wmsei
Mensajes: 28
Registrado: Lun Feb 18, 2013 9:07 pm

Migrar sistema em DBF para MySql

Mensaje por wmsei »

Srs. boa noite,
Estamos migrando nosso projeto de Clipper para o Xailer, inicialmente estavamos aproveitando nossos arquivos .DBF, depois dos iní­cios dos trabalhos resolvemos utilizar MySql, onde deparamos com algumas dificuldades como por exemplo: como alimentar ComboBox que atualmente esta assim,
::cbxNomeCliente:aItems:=::dbfCliente:SaveToArray({|Self|::N OME})
::cbxNomeCliente:InsertItem(1, "") usando TDbfDataSet.
Que componente MySql usariamos para que tenhamos os mesmos resultados?
Xailer 3.0.2
Harbour 32
MinGW
Grato pelo retorno e atenção
Wagner Monteiro dos Santos.
ddupre
Mensajes: 329
Registrado: Lun Nov 12, 2007 3:53 pm

Migrar sistema em DBF para MySql

Mensaje por ddupre »

<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
Wagner,<br>
<br>
Revisa el método QueryArray()<br>
<br>
Yo lo hago así­, esto está extraí­do de un formulario para manejar
usuarios y permisos<br>
<br>
METHOD DBComboBoxCreate( oSender ) CLASS TForm8130<br>
Local aPerfiles := {}, aDatos := {}<br>
<br>
<font color="#3333ff">aDatos_Id := {}<br>
oSender:oDataSet := ::oParent:oUsuarios<br>
oSender:oDataSet:Edit()<br>
<br>
aDatos := AppData:oMventas:QueryArray( "SELECT usuarios_id, nombre
FROM usuarios WHERE nroempresa = " +
ValToStr(Appdata:nNroEmpresa)+ " AND nombre <> " +
ValToStr(::cPerfilIni)+ " AND nombre <> " +
ValToStr('ADMINISTRADOR')+ " ORDER BY nombre")<br>
<br>
Aeval(aDatos, {|elementos,indice|
Aadd(aDatos_Id,elementos[1]),Aadd(aPerfiles,elementos[2])})<br >
oSender:aItems := aPerfiles<br>
oSender:Refresh()<br>
Return nil<br>
<br>
<font color="#000000">Saludos<br>
Daniel<br>
<br>
</font></font><br>
<div class="moz-cite-prefix">El 23/08/2013 18:37, Wagner escribió:<br>
</div>
<blockquote cite="mid:5217d60d$[email=1@svctag-j7w3v3j.]1@svctag-j7w3v3j.[/email]" type="cite">Srs.
boa noite,
<br>
<br>
Estamos migrando nosso projeto de Clipper para o Xailer,
<br>
inicialmente estavamos aproveitando nossos arquivos .DBF,
<br>
depois dos iní­cios dos trabalhos resolvemos utilizar MySql,
<br>
onde deparamos com algumas dificuldades como por exemplo:
<br>
como alimentar ComboBox que atualmente esta assim,
<br>
::cbxNomeCliente:aItems:=::dbfCliente:SaveToArray({|Self|::N
<br>
OME})
<br>
::cbxNomeCliente:InsertItem(1, "") usando TDbfDataSet.
<br>
<br>
Que componente MySql usariamos para que tenhamos os mesmos
<br>
resultados?
<br>
<br>
Xailer 3.0.2
<br>
Harbour 32
<br>
MinGW
<br>
<br>
Grato pelo retorno e atenção
<br>
<br>
Wagner Monteiro dos Santos.
<br>
</blockquote>
<br>
</body>
</html>
wmsei
Mensajes: 28
Registrado: Lun Feb 18, 2013 9:07 pm

Migrar sistema em DBF para MySql

Mensaje por wmsei »

Daniel Du Pré boa noite,
Vi alguns exemplos e ainda estou com duvidas:
No meu projeto estou usando: TMySQLDataSource, TSQLTable e TSQLQuery.
aDatos := AppData:oMventas:QueryArray, que tipo de objeto é oMventas, para que possa aplicar no meu projeto?
Grato pelo retorno e atenção.
Wagner Monteiro dos Santos.
ddupre
Mensajes: 329
Registrado: Lun Nov 12, 2007 3:53 pm

Migrar sistema em DBF para MySql

Mensaje por ddupre »

Wagner,
Al comienzo de la aplicación defino una Data de esta forma:
AppData:AddData("oMventas",TMySQLDataSource():Create())
por lo tanto oMventas es el DataSource
QueryArray es un método de TMySQLDataSource.
Explicación Extraí­da del manual de Xailer:
QueryArray
Devuelve en una matriz multidimensional toda la información recibida a
través de una instrución tipo SELECT en la base de datos.
Tipo

Estándar
Parámetros

<cSelect>
Instrucción SELECT
[<@aHeaders>]
Alimenta la matriz con los nombres de las columnas recuperadas
Valor Retorno

<aData>
Saludos
Daniel
El 26/08/2013 20:20, Wagner escribió:
> Daniel Du Pré boa noite,
>
> Vi alguns exemplos e ainda estou com duvidas:
>
> No meu projeto estou usando: TMySQLDataSource, TSQLTable e
> TSQLQuery.
> aDatos := AppData:oMventas:QueryArray, que tipo de objeto é
> oMventas, para que possa aplicar no meu projeto?
>
> Grato pelo retorno e atenção.
>
> Wagner Monteiro dos Santos.
>
--
wmsei
Mensajes: 28
Registrado: Lun Feb 18, 2013 9:07 pm

Migrar sistema em DBF para MySql

Mensaje por wmsei »

Daniel boa noite,
Primeiramente muito obrigado e desculpe minha ignorí¢ncia com Xailer + MySql.
Fiz conforme sua orientação, mas da o seguinte erro: not connected! [# -1], e o mais engraçado que tenho um browse dentro do formulário com a tabela que estou tentando acessar.
O que deixei de fazer?
Grato pelo retorno e atenção.
Wagner Monteiro dos Santos
ddupre
Mensajes: 329
Registrado: Lun Nov 12, 2007 3:53 pm

Migrar sistema em DBF para MySql

Mensaje por ddupre »

Wagner
Seguramente te está faltando conectarse a la base de datos. Luego de
definido el objeto público AppData:oMi_base_de_datos, deberí­a conectarse
a ella poniendo algo así­:
Function Conectar_Base_de_datos()
WITH OBJECT AppData:oMi_Base_de_datos
:cDatabase := "nombre_de_la_base_de_datos" <---- aqui pones el
nombre de tu base de datos
:cHost := "localhost"
:cPassword := "password" <------ aquí­ pones el password que le hayas
asignado a tu BD
:cUser := "root"
if .not. :Connect()
MsgStop('Error al Conectar a la Base de Datos ','Error')
Quit
else
MsgInfo("Se ha conectado con el servidor")
endif
END WITH
Return Nil
Yo lo hago al comienzo de la aplicación y de esa forma accedo a la BD
desde cualquier módulo de la misma.
Saludos
Daniel
El 26/08/2013 22:42, Wagner escribió:
> Daniel boa noite,
>
> Primeiramente muito obrigado e desculpe minha ignorí¢ncia
> com Xailer + MySql.
>
> Fiz conforme sua orientação, mas da o seguinte erro: not
> connected! [# -1], e o mais engraçado que tenho um browse
> dentro do formulário com a tabela que estou tentando
> acessar.
>
> O que deixei de fazer?
>
> Grato pelo retorno e atenção.
>
> Wagner Monteiro dos Santos
--
wmsei
Mensajes: 28
Registrado: Lun Feb 18, 2013 9:07 pm

Migrar sistema em DBF para MySql

Mensaje por wmsei »

Daniel boa noite,
Primeiramente mais uma vez muito obrigado, consegui abrir o banco de dados, mas quando alimento o combobox com um dos exemplos que peguei em algumas das duas publicaçíµes:
METHOD cbxCnpjCpfCreate( oSender ) CLASS frmCpFcr
Local aData
IF AppData:oMySqlDSMain:Execute( "select cpf_cgc from client",, @aData )
oSender:aItems := aData[1]
oSender:Refresh()
ENDIF
RETURN Nil


::cbxCnpjCpf:InsertItem( 1, "" )
::cbxCnpjCpf:nIndex := 1

Inclui uma linha em branco do jeito que queria, não consigo que role, nDataType:= dtBOUND e nStyle := csDROPDOWNLIST.
Tens alguma ideia que possa resolver isso.
Grato pelo retorno e atenção
Wagner Monteiro dos Santos
Avatar de Usuario
Carlos Ortiz
Mensajes: 872
Registrado: Mié Jul 01, 2009 5:44 pm
Ubicación: Argentina - Córdoba
Contactar:

Migrar sistema em DBF para MySql

Mensaje por Carlos Ortiz »

Estimado,
1. Crea un prg que se llame ElitabX y ponele lo que está mas abajo.
/*
ElitabX.prg
*/
#include "Xailer.ch"
CLASS TElitabX FROM TControl
DATA FoDbf INIT ""
DATA cValor INIT ""
DATA FoDataField INIT ""
DATA oDBCombo INIT NIL
DATA cSelect INIT "" // Consulta a ejecutar
DATA aItems INIT 1
DATA aItemsBound INIT 2
METHOD SetElitabX( oSender )
ENDCLASS
//---------------------------------------------------------- --------------------
METHOD SetElitabX( oSender ) CLASS TElitabX
local aData
::FoDbf:=TMemDataSet():Create( Self )
IF !empty(alltrim(::cSelect))
// Puede ser que levante los elementos y los ID de una tabla o no
aData:=AppData:oOdbcDS:QueryArray( ::cSelect )
::oDBCombo:aItems := ArrayCol( aData, 1 )
::oDBCombo:aItemsBound := ArrayCol( aData, 2 )
ENDIF
::oDBCombo:oDataField := ::FoDataField
::oDBCombo:oDataSet := ::FoDbf
::FoDbf:Edit()
::FoDbf:Open( {::oDBCombo:aItems} )
RETURN Nil
//---------------------------------------------------------- --------------------
FUNCTION Elitab( oForm, oDBCombo, cSelect, valorxdefecto )
local oObjeto, ret
WITH OBJECT oObjeto := TElitabX():New( oForm )
:oDBCombo := oDBCombo
:aItems := 1
:aItemsBound := 2
:cText := ""
:cSelect := cSelect
END WITH
oObjeto:SetElitabX(oForm, oDBCombo)
IF valorxdefecto # NIL
// Si hay un valor por defecto, lo busco en la lista
oDBCombo:nindex := aScan( oDBCombo:aitemsbound, valorxdefecto)
ELSE
// Sino lo posiciono en el primero
IF len(oObjeto:oDBCombo:aItems) > 0
oDBCombo:nindex := 1
ENDIF
ENDIF
RETURN .t.
//---------------------------------------------------------- --------------------
FUNCTION ArrayCol( aData, nCol )
local aCol := Array( Len( aData ) )
default nCol To 1
Aeval( aData, {|v,e| aCol[ e ] := v[ nCol ] } )
RETURN aCol
y listo.
Cómo se usa Elitab()
1. En el form poné un DbComoBox (no ComboBox) y llamalo oDBComboEspe por
ejemplo.
2. En el Inicialice del form cargalo con algo como esto:
*Elitab( Self, ::oDBComboEspe,"select nombre, idespecialidad from
especialidades order by nombre" )*
esto te asigna los campos que les pidas en el select a los aitems y
aitembound del combo.
siempre respeta el campo a mostrar primero y luego el id (pkey) por que
se los paso a aitems y aitemsbound
después con ::oDBComboEspe:nindex := y ::oDBComboEspe:aitemsbound
sabrás que selecciono.
Espero te sirva.
Carlos
--
Responder