Página 1 de 1

Migrar sistema em DBF para MySql

Publicado: Vie Ago 23, 2013 11:37 pm
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.

Migrar sistema em DBF para MySql

Publicado: Dom Ago 25, 2013 1:31 am
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>

Migrar sistema em DBF para MySql

Publicado: Mar Ago 27, 2013 1:20 am
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.

Migrar sistema em DBF para MySql

Publicado: Mar Ago 27, 2013 2:37 am
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.
>
--

Migrar sistema em DBF para MySql

Publicado: Mar Ago 27, 2013 3:42 am
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

Migrar sistema em DBF para MySql

Publicado: Mar Ago 27, 2013 3:20 pm
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
--

Migrar sistema em DBF para MySql

Publicado: Jue Ago 29, 2013 4:02 am
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

Migrar sistema em DBF para MySql

Publicado: Jue Ago 29, 2013 6:33 am
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
--