Pasar a SQL paso a paso para Novatos..

Re: Pasar a SQL paso a paso para Novatos..

Postby sysctrl2 » Fri Jul 25, 2014 3:11 am

Cuate, xHarbour 1.2.1.

ccc_3_ccc@hotmail.co SKYPE

saludos..
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
sysctrl2
 
Posts: 951
Joined: Mon Feb 05, 2007 7:15 pm

Re: Pasar a SQL paso a paso para Novatos..

Postby cuatecatl82 » Fri Jul 25, 2014 3:24 am

Intente compilar los fuentes de tdolphin directamente con xverce pero manda muchos errores con Harbour 3, algo hay dentro de low scrips que no cuadra con mi compilacion, baje la última versión de fivedbu y revise los fuentes, hay funciones que no tengo porque estoy desactualizado en fw, pero pude extraer y armar por aparte la apertura directa del archivo neptuno.mdb que trae en los ejemplos de Ms Acces 2007, pude explorar las tablas y revisar el contenido de cada una de ellas con la consulta select, creo que es un avance, estoy revisando como crear desde cero una base de datos y construir sus tablas para ingresar datos y relacionarlas.. Gracias sigo investigando y preguntado, Saludos
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Re: Pasar a SQL paso a paso para Novatos..

Postby cuatecatl82 » Sat Jul 26, 2014 3:35 am

Saludos de nuevo a todos:

He investigado y tratando de comprender este mundo del SQL, he vuelto a revisar y complilar los fuentes deTDolphin, funciona pero al parecer los sitios host del archivo connect.ini no son validos, no puedo accesar mediante el navegador:
dolphintest.sitasoft.net me pide usuario y contraseña y las que estan en este archivo no son validos, eso creo..

Image

Hay tantos motores y tantos gestores para bases de datos que no se cual seria el ideal para comenzar a entender como es trabajar con SQL, TMySQL, Eagle1, TDolphin, y mas, he revisado muchos sitios, codigos y videos, al final me confunden más. Realmente no se hacia donde me dirija todo lo que intento probar, pero he realizado algo que la verdad no se que sea o con que trato de comunicarme, aun no me queda claro si trabajo con ADO, con SQL o con que.. les dejo lo que tengo hasta ahora para que le den una revisadita, por lo pronto puedo crear una tabla y abrirla en procesos separados, la extención del archivo es .MDB que son nativos de MS Acces no se con que motor trabaje, ojala me comentes si voy bien o me regreso.


Code: Select all  Expand view
#include "FiveWin.ch"
#include "xbrowse.ch"

FUNCTION Main()

CreaMDB()
AbreMDB()

RETURN Nil



STATIC FUNCTION CreaMDB()

LOCAL oCn,CatNewDB,cProvider,cSource,cConnect,cSQL,cTabla

   cTabla:= "CLIENTES"
  cSource:= ".\DANIEL.MDB"
cProvider:= "Microsoft.Jet.OLEDB.4.0"
 cConnect:= 'Provider='+cProvider+';Data Source='+cSource


IF FILE(cSource)
  FERASE(cSource)
ENDIF
 

   TRY
      CatNewDB:= CreateObject("ADOX.Catalog")
   CATCH
      MSGInfo("No se puede crear objeto Adox")
      RETURN(.F.)
   END TRY


   TRY
      CatNewDB:CREATE('Provider='+cProvider+';Data Source='+cSource+';Jet OLEDB:Engine Type=5' )
   CATCH
     MSGInfo("No se puede crear la tabla "+cSource )
     RETURN(.F.)
   END TRY


   TRY
      oCn:= CREATEOBJECT("ADODB.Connection")
   CATCH
     MSGInfo( "No se puede crear connección con ADO")
   END TRY


   TRY
      oCn:Open(cConnect)
   CATCH
     MSGInfo( "No se puede abrir la conección a la Base de Datos "+cSource )
     RETURN(.F.)
   END TRY
   
   
   cSQL := "CREATE TABLE "+cTabla
   cSQL += "( "
   cSQL += "[APODO] char(18) NOT NULL, "
   cSQL += "[NOMBRE] char(30) NULL, "
   cSQL += "[APELLIDO] char(30) NULL, "
   cSQL += "[DIRECCION] char(30) NULL, "
   cSQL += "[TELEFONO] char(30) NULL, "
   cSQL += "[CIUDAD] char(30) NULL, "
   cSQL += "[ESTADO] char(30) NULL, "
   cSQL += "CONSTRAINT PK_USERINFO PRIMARY KEY ( APODO )"
   cSQL += " )"

   TRY
      oCn:Execute(cSQL)
   CATCH
      MSGInfo( "Fallo en la Tabla "+cTabla )
      RETURN(.F.)
   END TRY

   oCn:CLOSE()
   oCn:= Nil



RETURN Nil



STATIC FUNCTION AbreMDB()

LOCAL cTable,oRs,oCon,aTokens,nAt,oError,cConnection,cFileName
LOCAL oWnd,oBrw,N,cClrBack,cAlias


cFileName:= ".\DANIEL.MDB"

IF FILE(cFileName)
   cConnection:= "Provider='Microsoft.Jet.OLEDB.4.0'; Data Source='" + cFileName + "';"

    TRY
     
      IF !EMPTY( cConnection )
           oCon:= FW_OPenAdoConnection( cConnection )
           aTokens:= hb_ATokens( cConnection, ";" )
       
            IF EMPTY( cFileName ) .OR. cFileName == "."
               IF ( nAt := ASCAN( aTokens, { | c | "data source" $ LOWER( c ) .OR. ;
                    "data source" $ LOWER( c ) .OR. "database" $ LOWER( c ) } ) ) != 0
                    cFileName:= hb_TokenGet( aTokens[ nAt ], 2, "=" )
               ENDIF
            ENDIF    
      ENDIF
     
     
   CATCH oError
      MSGInfo( oError:Description )
   END

   
   oRs:= oCon:OpenSchema( 20 )
   oRs:FILTER = "TABLE_TYPE='TABLE'"

   XBROWSER oRS TITLE "Select a table" ;
       COLUMNS { "TABLE_NAME" };
       SELECT cTable:= oBrw:aCols[ 1 ]:Value

   oRs:CLOSE()  
   oRs:= TOleAuto():New( "ADODB.Recordset" )
   oRs:CursorType     = 1      
   oRs:CursorLocation = 3        
   oRs:LockType       = 3      

   IF EMPTY( cTable )
      RETURN Nil
   ENDIF


   TRY
      oRs:Open( "SELECT * FROM " + cTable, oCon )
   CATCH oError
      MSGInfo( oError:Description )
   END



  DEFINE WINDOW oWnd TITLE "Browse " + cTable

   oWnd:bCopy = { || MSGInfo( "copy" ) }

   @ 0, 0 xBROWSE oBrw OF oWnd LINES ;
      AUTOCOLS RECORDSET oRs AUTOSORT

   FOR n := 1 TO LEN( oBrw:aCols )
      IF oBrw:aCols[ n ]:cDataType == 'M'
         oBrw:aCols[ n ]:bStrData = GenLocalBlock( oBrw:aCols, n )
      ENDIF
   NEXT

   oBrw:nMarqueeStyle := MARQSTYLE_HIGHLROW
   oBrw:bClrStd = { || IF( oBrw:KeyNo() % 2 == 0, ;
                         { IF( ( oBrw:cAlias )->( DELETED() ), CLR_HRED, CLR_BLACK ),;
                           RGB( 198, 255, 198 ) }, ;
                         { IF( ( oBrw:cAlias )->( DELETED() ), CLR_HRED, CLR_BLACK ),;
                           RGB( 232, 255, 232 ) } ) }
   oBrw:bClrSel = { || { IF( ( oBrw:cAlias )->( DELETED() ), CLR_HRED, CLR_WHITE ),;
                           RGB( 0x33, 0x66, 0xCC ) } }
   cClrBack = EVAL( oBrw:bClrSelFocus )[ 2 ]
   oBrw:bClrSelFocus = { || { IF( ( oBrw:cAlias )->( DELETED() ), CLR_HRED, CLR_WHITE ),;
                              cClrBack } }
   oBrw:SETCOLOR( CLR_BLACK, RGB( 232, 255, 232 ) )

   oBrw:CreateFromCode()
   oBrw:SetFocus()

   oWnd:oClient = oBrw


   ACTIVATE WINDOW oWnd ;
      VALID ( ( cAlias )->( DBCLOSEAREA() ), oBrw:cAlias := "", .T. )
       
     

ELSE

MSGStop(cFileName,"No Existe")

ENDIF
   
RETURN Nil


//----------------------------------------------------------------------------//

FUNCTION GenLocalBlock( aCols, n )
RETURN { || EVAL( aCols[ n ]:bEditValue ) }
 



Se aceptan regaños, jalones de oreja, comentario criticas y lo que valga para corregir mis fallos.. Saludos y gracias por tomarse su tiempo..
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Re: Pasar a SQL paso a paso para Novatos..

Postby cmsoft » Sat Jul 26, 2014 1:02 pm

Hola Victor:
Te dejo una opcion que para mi serían los pasos a seguir para usar MySql con la librería Dolphin de Daniel Garcia
1) Descargar MySql: Es el instalador para cargar en tu PC el motor de la base de datos. Es bueno que lo tengas instalado para hacer todas la pruebas en modo local
http://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-5.6.19.0.msi
2) Un gestor de base de datos: Algún producto que te permita administrar la base de datos (lo que antes era el DBU para los clipperos), aunque puedes hacerlo en modo consola, pero es mas practico tener algo Visual. Hay muchisimos gestores de base de datos MySql, elije el que quieras, algunos son de paga otros no.
Aqui deberas crear una base de datos y sus tablas para poder usarlas desde el programa que desarrollaras
http://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-workbench-community-6.1.7-win32.msi
3) La libreria Tdolphin de Daniel: Es una herramienta estupenda, que te permitirá facilitarte el traspaso del modelo de datos, pues trabajarás con una clase que es algo conocido para vos.
https://bitbucket.org/danielgarciagil/tdolphin/get/d9d98a01d609.zip
4) Armar los programas y empezar a probar! En la carpeta samples de Dolphin hay varios ejemplos para que vayas probando
La estructura de un programa fivewin con la libreria Dolphin en principio tendría que tener la siguiente estructura:
4.1 Conectar el programa con el servidor de base de datos:
Code: Select all  Expand view

#include "tdolphin.ch"
#include "fivewin.ch"
FUNCTION Connect( )
   LOCAL oServer  
   LOCAL oErr
   TRY
      CONNECT oServer HOST "localhost" ;
                      USER "root" ;
                      PASSWORD "1234";
                      PORT 3306 ;
                      FLAGS 0;
                      DATABASE "MiDataBase"
                               
   CATCH oErr
     RETURN NIL
   END
RETURN oServer

4.2 Realizar una consulta y mostrarla en un browse
Code: Select all  Expand view

#include "Fivewin.ch"
#include "xbrowse.ch"
#include "Tdolphin.ch"
PROCEDURE Consulta()
LOCAL oQry, oDlg
oQry  := oServer:Query( "SELECT * FROM clientes ORDER BY nombre")
DEFINE DIALOG oDlg RESOURCE "ABMCliente" OF oWnd
     REDEFINE XBROWSE oBrw DATASOURCE oQry;
              COLUMNS "Codigo","Nombre";              
              SIZES 50,350;
              ID 111 OF oDlg AUTOSORT
     REDEFINE SAY oBrw:oSeek PROMPT "" ID 113 OF oDlg
ACTIVATE DIALOG oDlg CENTER
 

4.3 Agregar o modificar un un registro a la tabla:
Code: Select all  Expand view
STATIC FUNCTION Formu ( lAlta)
LOCAL oGet := ARRAY(4), oBot := ARRAY(2), oForm, lRta := .f., base, oError
// Base es una variable donde dejo un objeto fila, un registro de la tabla
IF lAlta
   base := oQry:GetBlankRow() // Lo que seria un append blank
   base:codigo := oServer:GetAutoIncrement("clientes") // Esto es si tu tabla es autoincremental en el codigo
   ELSE
   base := oQry:GetRowObj()
ENDIF
DO WHILE .T.
DEFINE DIALOG oForm TITLE IF(lAlta,"Alta","Modificacion") + " de Clientes";
       FROM 05,15 TO 15,65 OF oWnd  
   @ 05, 05 SAY "Codigo:"     OF oForm PIXEL
   @ 20, 05 SAY "Nombre:"    OF oForm PIXEL
   @ 05, 75 GET oGet[1] VAR base:codigo PICTURE "99999" OF oForm PIXEL RIGHT WHEN(.F.)
   @ 20, 75 GET oGet[2] VAR base:nombre PICTURE "@!"    OF oForm PIXEL  VALID(base:nombre<>SPACE(30))
   @ 35,05 BUTTON oBot[1] PROMPT "&Grabar" OF oForm SIZE 30,10  ACTION ((lRta := .t.), oForm:End() ) PIXEL
   @ 50,05 BUTTON oBot[2] PROMPT "&Cancelar" OF oForm SIZE 30,10 ACTION ((lRta := .f.), oForm:End() ) PIXEL CANCEL
ACTIVATE DIALOG oForm CENTER
IF !lRta
   RETURN nil
ENDIF
oQry:oRow := base
TRY
  oQry:Save()
  oQry:Refresh(.t.)
CATCH oError
  MsgStop("Error al grabar"+CHR(10)+oError:description,"Error")
   LOOP
END TRY
EXIT
ENDDO
RETURN nil

4.4 Eliminar un registro
Code: Select all  Expand view
STATIC FUNCTION Baja (  )
LOCAL lRta := .f., oError
lRta := MsgNoYes("Seguro de eliminar el Registro?","Atencion")
IF !lRta
   RETURN nil
ENDIF
TRY
  oQry:Delete()
  oQry:Refresh(.t.)
CATCH oError
  MsgStop("Error al borrar"+CHR(10)+oError:description,"Error")
END TRY
RETURN nil

4.5 Generar un reporte
Code: Select all  Expand view

#include "report.ch"
#include "FiveWin.ch"
#include "tdolphin.ch"
FUNCTION LisCli()
LOCAL oRep
REPORT oRep TITLE "Reporte de Clientes";
       HEADER "Clientes";
       FOOTER "Hoja:" + STR(oRep:npage,3) + SPACE(40)+"Fecha:"+DTOC(DATE());
       PREVIEW      
COLUMN TITLE "N° Cliente"      DATA oQry:codigo    SIZE 10
COLUMN TITLE "Razón social"   DATA oQry:nombre   SIZE 12
oRep:bInit := {|| oQry:GoTop() }
oRep:bSkip := {|| oQry:Skip() }
END REPORT
ACTIVATE REPORT oRep
RETURN NIL
 

5. Compilar y enlazar tus prgs con la libreria de dolphin, el Rc y demas
5.1 Para compilar cada uno de tus .prg podrias usar un .bat asi
Code: Select all  Expand view
@ECHO OFF
CLS
if A%1 == A GOTO :SINTAX
if NOT EXIST %1.prg GOTO :NOEXIST
ECHO Compiling...
set hdir=c:\harbour
set bcdir=c:\bcc582
SET INCLUDE=C:\FWH\INCLUDE

%hdir%\bin\harbour %1 /n /i..\include;%hdir%\include /w /p %2 %3 > clip.log
@type clip.log
IF ERRORLEVEL 1 PAUSE
IF ERRORLEVEL 1 GOTO EXIT

echo -O2 -e%1.exe -I%hdir%\include %1.c > b32.bc
%bcdir%\bin\bcc32 -M -c @b32.bc
:ENDCOMPILE


5.2 Para enlazar podrías usar otro .bat asi:
(Imaginemos que tu programa principal se llama MIEXE.PRG y tienes el recurso .RC con el mismo nombre, y que tienes dos .prg ABMCLI.PRG Y LISCLI.PRG que son el abm de clientes y el reporte de clientes, todos los compilaste y tengo los .obj creados
Code: Select all  Expand view
@ECHO OFF
CLS
set hdir=c:\harbour
set bcdir=c:\bcc582
SET LIB=C:\FWH\LIB
echo -O2 -eMIEXE.exe -I%hdir%\include MIEXE.c > b32.bc
%bcdir%\bin\bcc32 -M -c @b32.bc
:ENDCOMPILE

IF EXIST MIEXE.rc %bcdir%\bin\brc32 -r MIEXE

echo c0w32.obj + > b32.bc
echo MIEXE.obj  + >> b32.bc
echo abmcli.obj liscli.obj + >> b32.bc
echo conectar.obj, + >> b32.bc
echo MIEXE.exe, + >> b32.bc
echo MIEXE.map, + >> b32.bc

echo %LIB%\dolphin.lib + >> b32.bc
echo %LIB%\\FiveH.lib %LIB%\\FiveHC.lib + >> b32.bc
echo %LIB%\\libmysql.lib + >> b32.bc
echo %LIB%\\libmysqld.lib + >> b32.bc

echo %hdir%\lib\hbrtl.lib + >> b32.bc
echo %hdir%\lib\xhb.lib + >> b32.bc
echo %hdir%\lib\hbvm.lib + >> b32.bc
echo %hdir%\lib\gtgui.lib + >> b32.bc
echo %hdir%\lib\gtstd.lib + >> b32.bc
echo %hdir%\lib\hblang.lib + >> b32.bc
echo %hdir%\lib\hbmacro.lib + >> b32.bc
echo %hdir%\lib\hbrdd.lib + >> b32.bc
echo %hdir%\lib\rddntx.lib + >> b32.bc
echo %hdir%\lib\rddcdx.lib + >> b32.bc
echo %hdir%\lib\rddfpt.lib + >> b32.bc
echo %hdir%\lib\hbsix.lib + >> b32.bc
echo %hdir%\lib\hbdebug.lib + >> b32.bc
echo %hdir%\lib\hbcommon.lib + >> b32.bc
echo %hdir%\lib\hbpp.lib + >> b32.bc
echo %hdir%\lib\hbusrrdd.lib + >> b32.bc
echo %hdir%\lib\hbwin.lib + >> b32.bc
echo %hdir%\lib\hbcplr.lib + >> b32.bc
echo %hdir%\lib\hbct.lib + >> b32.bc
echo %hdir%\lib\hbcpage.lib + >> b32.bc
echo %hdir%\lib\hbhsx.lib + >> b32.bc
echo %hdir%\lib\hbmisc.lib + >> b32.bc
echo %hdir%\lib\hbmzip.lib + >> b32.bc
echo %hdir%\lib\hbnf.lib + >> b32.bc
echo %hdir%\lib\hbpcre.lib + >> b32.bc
echo %hdir%\lib\hbtip.lib + >> b32.bc

echo %bcdir%\lib\cw32.lib + >> b32.bc
echo %bcdir%\lib\uuid.lib + >> b32.bc
echo %bcdir%\lib\import32.lib + >> b32.bc
echo %bcdir%\lib\ws2_32.lib + >> b32.bc
echo %bcdir%\lib\psdk\odbc32.lib + >> b32.bc
echo %bcdir%\lib\psdk\nddeapi.lib + >> b32.bc
echo %bcdir%\lib\psdk\iphlpapi.lib + >> b32.bc
echo %bcdir%\lib\psdk\msimg32.lib + >> b32.bc
echo %bcdir%\lib\psdk\psapi.lib + >> b32.bc
echo %bcdir%\lib\psdk\rasapi32.lib + >> b32.bc
echo %bcdir%\lib\psdk\gdiplus.lib + >> b32.bc
echo %bcdir%\lib\psdk\shell32.lib, >> b32.bc

IF EXIST MIEXE.res echo MIEXE.res >> b32.bc

%bcdir%\bin\ilink32 -Gn -aa -Tpe -s @b32.bc

IF ERRORLEVEL 1 GOTO LINKERROR
ECHO * Application successfully built
@del *.c
@del *.PPO
@del *.MAP
GOTO EXIT
ECHO

@del *.c
@del *.PPO
@del *.MAP

:LINKERROR
ECHO * There are errors
GOTO EXIT

:SINTAX
ECHO    SYNTAX: Build [Program]     {-- No especifiques la extensi¢n PRG
ECHO                                {-- Don't specify .PRG extension
GOTO EXIT

:NOEXIST
ECHO The specified PRG %1 does not exist

:EXIT


Espero que te sea de utilidad, cualquier duda solo consulta que siempre aqui se encuentran las respuestas!!
Buena suerte!
User avatar
cmsoft
 
Posts: 1189
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Pasar a SQL paso a paso para Novatos..

Postby sysctrl2 » Sat Jul 26, 2014 5:22 pm

en modo local en lugar de usar: HOST "localhost"
debes de usar HOST "127.0.0.1"
no se que le pasa a tdolphin que con algunos Windows
no funciona lo primero.
Saludos..

En mi caso lo mas difícil para mi fue compilar la librería jeje.
saludos.
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
sysctrl2
 
Posts: 951
Joined: Mon Feb 05, 2007 7:15 pm

Re: Pasar a SQL paso a paso para Novatos..

Postby cuatecatl82 » Sun Jul 27, 2014 3:39 am

No pense decir esto pero hasta aqui llegué, mi pasiencia y mi tiempo se agoto mejor continuo con DBF´s

Es engorroso y preocupante para los que no migramos a estos entornos no tener todavia nada más nativo con Harbour puro, por lo que he buscado en el foro la mayor parte de los que tienen exito en SQL usan xHarbour, aunque se supone que Harbour es "mejor" por eso hize el cambio.

cmsoft: Muchisimas gracias por tu ayuda, crei emocionado avanzar pero fue mayor mi desilucion, segui tu consejo y me encontre varias sorpresas, mi idea como leí en muchos mensajes era no instalar nada mas que compartir con mi aplicación una dll y todo el proceso seria interno y transparente via código..

Les presento mi entorno:

Formateo mi PC e instalo Windows XP SP3 en limpio.

Bajo e instalo http://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-5.6.19.0.msi -> Primer tropiezo: Falta bajar en Instalar Net Framework 4, ok lo bajo e instalo, -> Segundo tropiezo: Falta MS Visual C++ 2010, va de nuevo lo bajo y lo instalo, listo por fin puedo instalar MySQL, me pide bajar un monton de paquetes que me confunden mas y configuro para modo Developer, me avisa que hay fallos que faltan paquetes que no se encontraron, pero se instala y de paso instala Mysql-Workbench.

Va pa tras, vuelvo a formatear e Instalo Windows Seven Ultimate 32Bits: misma historia.

Bajo de nuevo los fuentes de TDolphin y sorpresa, la lib es mas grande de la que ya habia creado de 105KB a 108KB, pruebo y no pasa nada, mismos errores de conección.

Bajo e Instalo SQL Management Studio, -> Tercer tropiezo falta instalar Net Framework 3.5 SP1 (Que no se supone que al instalar la version 4 la 3.5 no es necesario..?)

Mi mas humilde opinion espero no ofender y desmeeritar el trabajo de muchos, pero todas las clases para control de SQL gratuitas les falta un manual paso a paso, desde que defines, como funcionaran las variables para como establecer una conección, como crear la base de datos, las tablas, que son lo mas basico para los que no sabemos ni papa como yo, ya se que van a decir que para eso es el codigo fuente que hay que leer, pero insisto no es suficiente, falta informacion detallada para no perder tiempo y desistir en el camino.

Ni hablar sera para la otra, como decimos por aqui: Lastima Margarito..

Cierro hasta aqui no sin antes agradecerles a todos por su tiempo y su ayuda.. Un abrazo..
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Re: Pasar a SQL paso a paso para Novatos..

Postby xmanuel » Sun Jul 27, 2014 9:35 am

Hola Victor, soy Manu Expósito desarrollador de Eagle1, lamento que te hayas desilucionado de esa manera.

El principal problema que creo que tienes es que sigues pensando en DBF y eso es un error muy grande. El mundo SQL no tiene nada que ver con DBF salvo en que se guarda informacion y se recupera.
Incluso cuando SQL trabaja en local en una sola máquina su paradigma sigue siendo cliente/servidor. Esto es sun gran virtud y para ti su mayor despropósito.

En SQL tu tienes un servidor que tiene que ser instalado si no lo está. Este servidor se encarga del mantenimiento de las tablas que son los objetos más importantes de de la base de datos ya que ellas son las encargadas de guardar de manera ordenada y no redundante la información. Dentro de la base de datos hay otros objetos como los indices, procedimientos almacenados, disparadores etc. Pero eso no es tu problema en principio.
El servidor se encargara entre otras cosas de atender las peticiones de los clientes y de hacer que estas sean lo más eficaces posibles.

Tu debes desarrollar la parte cliente.
1) tienes que conecarte( clase TConnect )
2) abrir la base de datos con el metodo open de la conexión.
3) interactuar con las tablas (clase TTable):
- Altas -> oTb:insert()
- Bajas -> oTb:delete()
- Modificaciones -> oTb:update()
- Consultas -> oTb:query()

Créeme que cuando te acostumbras todo es super fácil de manejar y habrás dado un salto gigantesco
Te voy a poner un ejemplo completo donde podrás ver todo lo que te he explicado antriormente y algunas cosas más:

Code: Select all  Expand view


//-- Definiciones ------------------------------------------------------------//

#define B_BOX ( CHR( 218 ) + CHR( 196 ) + CHR( 191 ) + CHR( 179 ) + ;
                CHR( 217 ) + CHR( 196 ) + CHR( 192 ) + CHR( 179 ) + " " )

#define ID_CONSUTA  0
#define ID_MODIFICA 1
#define ID_ALTA     2
#define ID_BORRA    3

//-- Includes ----------------------------------------------------------------//

#include "InKey.ch"
#include "Eagle1.ch"

//-- Fuerza el enlazado -----------------------------------------------------//

REQUEST HB_GT_WIN

//-- Modulo principal --------------------------------------------------------//

procedure main()

    local cDb := "E1Prueba"
    local cTable := "Test"
    local oCon, oTb, n

//----------------------------------------------------------------------------
// Desde aquÝ se decide si el sistema usado es el C/S o el embebido

#ifdef E1_EMBEDDED
    // Sistema embebido.
    // El primer elemento del array de opciones deberÝa ser el nombre
    // del programa, actualmente E1 hace lo mismo que MySQL y lo ignora.
    // Ojo!!! s¾lo se procesa a partir del segundo.
    local aOptions := { "PT05.PRG", "--defaults-file=./test.cnf" }
    // El array de grupos contiene los nombres de los grupos que queramos
    // procesar dentro del fichero ini declarado
    local aGroup := { "op_servidor", "op_cliente" }

    //-----------------------------------------------------
    // Creamos el objeto Connect e intentamos la conexi¾n:

    oCon := TMSEConnect():New( )
    oCon:Connect(  aOptions, aGroup, cDb )
#else
    // Sistema Cliente/Servidor
    local cHost := "127.0.0.1"
    local cUser := "root"
    local cPwd := "root"
    local port := 3306

    //-----------------------------------------------------
    // Creamos el objeto Connect e intentamos la conexi¾n:
    oCon := TMSConnect():New()
    oCon:Connect( cHost, cUser, cPwd, cDb, port,, CLIENT_MULTI_STATEMENTS )
#endif

// Hasta aquÝ. A paritir de aquÝ no se cambia ni una lÝnea de c¾digo
//----------------------------------------------------------------------------

    SET DATE FORMAT TO "DD/MM/YYYY"

    SET EXACT on // Afecta a las b·squedas con los metodos Find y FindLike

    cls

    if oCon:lConnected
        // Control de errores automßtico
        oCon:SetAutoError( .t. )
        // Creo el objeto Tabla con DataField
        oTb := TMyTable( cTable ):New( oCon, cTable )
        // Establezco el relleno de espacios (menos optimo)
        oTb:SetReadPADAll( .t. )
        // Prueba de tiny como logicos:
        oTb:SetTinyAsLogical( .t. )
        // Abro la tabla
        if oTb:Open()
            MyMsgInfo( oCon:oDataBase:ShowCreate(), "Creaci¾n de " + oCon:oDataBase:cName )
            MyMsgInfo( oTb:ShowCreate(), "Estructura de " + oTb:cName )
            Alert( "Estado actual de la conexion...;-------------------------------;;";
                   + oCon:GetStat() )
            // Abrimos el Browse
            GestBrw( oTb )
        else
            // Esta es la manera de poner un mensaje de error propio y
            // del generado po r Eagle1 cuando ponemos SetAutoError( .f. )
            Alert( ";Mi mensaje de error:;No se pudo abrir la tabla " + oTb:cName + ;
                   ";;Y el devuelto por Eagle1:;" + oTb:oError:GetError() )
        endif
        // Prueba de FieldName y FieldPos
        n := 6
        Alert( "Nombre de la columna " + StrNum( n ) + ": " +;
               oTb:FieldName( n ) + ;
               ";Orden de la columna ZIP: " + ;
               StrNum( oTb:FieldPos( "zip" ) ) + " Valor " + ;
               oTb:FieldGetByName( "zip" ) + " - " + ;
               oTb:FieldGet( oTb:FieldPos( "zip" ) ) )
        Alert( "oTb:FieldName( oTb:FieldPos( 'zip' ) ) " + oTb:FieldName( oTb:FieldPos( "zip" ) ) )
        // Prueba de setWhere
        oTb:SetWhere( "first = 'Homer'", .t. ) // Asigna la condici¾n y refresca el reultado
        Alert( oTb:cStatement )
        // Abrimos el Browse
        GestBrw( oTb )

        //------------------------------
        // Ejemplo SELECT escalar o sea que retorna un valor unico que puede ser
        // numerico o alfanumerico
        cls
        Alert( "Numero de registros hallados con la funcion COUNT( * ): " + ;
               StrNum( oCon:GetScalarQuery( "SELECT count( * ) FROM test" ) ) )

        Alert( "Ahora la columna NOTES de la primera fila : " + ;
               oCon:GetScalarQuery( "SELECT notes FROM test" ) )

        // Liberamos la memoria ocupada por el objeto tabla
        oTb:Free()

//------------------------------
// METHOD Export( cBakFileName, lCreate, aTables, lDropTable )
// Prueba de backup:
        n := Seconds()
        oCon:oDataBase:Export() // "MiCopia.sql", .t. )

        Alert( "La copia se ha realizado con el nombre: " + ;
               oCon:oDataBase:cBakFileName + ";;en " + ;
               StrNum( Seconds() - n ) + " segundos" )

//------------------------------
// Este es el restore
//
        if oCon:oDataBase:Import( oCon:oDataBase:cBakFileName )
            Alert( "La restauracion de la copia se ejecuto ok" )
        else
            Alert( "Error en la restauracion de la copia..." )
        endif

//------------------------------
    else
        Alert( "No se pudo conectar..." )
    endif

    // Liberamos la memoria de la conexion
    oCon:Free()

return

//-- Modulos auxiliares ------------------------------------------------------//

//----------------------------------------------------------------------------//
// Gestion completa de una tabla MySQL

static procedure GestBrw( oTb )

    local oBrw, oCol
    local lEnd := .f.
    local nKey, n, nFld, nRecNo

    oBrw := TBrowseNew( 1, 0, MaxRow() - 1, MaxCol() )

    oBrw:colorSpec := "W+/B, N/BG"
    oBrw:ColSep    := " │ "
    oBrw:HeadSep   := "─┼─"
    oBrw:FootSep   := "─┴─"
    // Asignamos los bloques de codigo de movimientos del cursor
    // de datos
    MySetBrowse( oBrw, oTb )

    nFld := oTb:FieldCount()

    FOR n := 1 TO nFld
        oBrw:AddColumn( TBColumnNew( PADL( n, 2, "0" ) + "-" + ;
                        oTb:FieldType( n ) + "-" + oTb:FieldName( n ), ;
                        GenCB( oTb, n ) ) )
    NEXT

    cls

    @ 0, 0 SAY PadC( "Ojeando la tabla: " + ;
                        upper( oTb:cName ), MaxCol() + 1, " " ) COLOR "W+/G+"

    @ MaxRow(),         0 SAY "INS"                 COLOR "GR+/R+"
    @ MaxRow(), Col() + 1 SAY "Altas"               COLOR "W+/R+"
    @ MaxRow(), Col() + 1 SAY "ENTER"               COLOR "GR+/R+"
    @ MaxRow(), Col() + 1 SAY "Mod."                COLOR "W+/R+"
    @ MaxRow(), Col() + 1 SAY "SUPR"                COLOR "GR+/R+"
    @ MaxRow(), Col() + 1 SAY "Bajas"               COLOR "W+/R+"
    @ MaxRow(), Col() + 1 SAY "F1"                  COLOR "GR+/R+"
    @ MaxRow(), Col() + 1 SAY "Ayuda"               COLOR "W+/R+"
    @ MaxRow(), Col() + 1 SAY "F4"                  COLOR "GR+/R+"
    @ MaxRow(), Col() + 1 SAY "Orden"               COLOR "W+/R+"
    @ MaxRow(), Col() + 1 SAY "F5"                  COLOR "GR+/R+"
    @ MaxRow(), Col() + 1 SAY "Busca"               COLOR "W+/R+"
    @ MaxRow(), Col() + 1 SAY "F6"                  COLOR "GR+/R+"
    @ MaxRow(), Col() + 1 SAY "Busca ->"            COLOR "W+/R+"
    @ MaxRow(), Col() + 1 SAY "ESC"                 COLOR "GR+/R+"
    @ MaxRow(), Col() + 1 SAY "Salir"               COLOR "W+/R+"

    while !lEnd

      oBrw:forceStable()

      nKey = InKey( 0 )

      do case
         case nKey == K_ESC             // Salir
              SetPos( MaxRow(), 0 )
              lEnd = .t.

         case nKey == K_DOWN            // Fila siguiente
              oBrw:Down()

         case nKey == K_F3
              oTb:SetReadPADAll( !oTb:SetReadPADAll() )
              oBrw:Configure()

         case nKey == K_F4              // Establece el orden
                if ElOrden( oTb )
                    oBrw:goTop()
                endif

         case nKey == K_F5              // Busca valor en columna
            if BuscaValor( oTb )
                Alert( "Valor encontrado..." )
            else
                Alert( "Valor no encontrado..." )
            endif
            oBrw:RefreshAll()

         case nKey == K_F6              // Busca siguiente columna
            // Busqueda blanda
            //if !oTb:FindLikeNext()
            // Busqueda exacta
            nRecNo := oTb:RecNo()
            if oTb:findNext()
                Alert( "Valor encontrado..." )
            else
                oTb:goTo( nRecNo )
                Alert( "Valor no encontrado..." )
            endif
            oBrw:RefreshAll()

         case nKey == K_UP              // Fila anterior
              oBrw:Up()

         case nKey == K_LEFT            // Va a la columna antrior
              oBrw:Left()

         case nKey == K_RIGHT           // Va a la columna siguiente
              oBrw:Right()

         case nKey = K_PGDN             // Va a la pagina siguiente
              oBrw:pageDown()

         case nKey = K_PGUP             // Va a la pagina antrior
              oBrw:pageUp()

         case nKey = K_CTRL_PGUP        // Va al principio
              oBrw:goTop()

         case nKey = K_CTRL_PGDN        // Va al final
              oBrw:goBottom()

         case nKey = K_HOME             // Va a la primera columna visible
              oBrw:home()

         case nKey = K_END              // Va a la ultima columna visible
              oBrw:end()

         case nKey = K_CTRL_LEFT        // Va a la primera columna
              oBrw:panLeft()

         case nKey = K_CTRL_RIGHT       // Va a la ultima columna
              oBrw:panRight()

         case nKey = K_CTRL_HOME        // Va a la primera pßgina
              oBrw:panHome()

         case nKey = K_CTRL_END         // Va a la ·ltima pßgina
              oBrw:panEnd()

         case nKey = K_DEL              // Borra fila
            Borrar( oTb, oBrw )

         case nKey = K_INS              // Inserta columna
            Insertar( oTb, oBrw )

         case nKey = K_ENTER            // Modifica columna
            Modificar( oTb, oBrw )

         case nKey == K_F1              // Algunos datos
            Alert( "Datos de la tabla " + oTb:cName + ";" + ;
                   ";Registro actual......: " + Str( oTb:RecNo() ) + ;
                   ";Total de registros...: " + Str( oTb:RecCount() ) + ;
                   ";Total de columnas....: " + Str( oTb:FieldCount() ) )
            Muestra( oTb:GetRowAsString() )

      endcase

   end

return

//----------------------------------------------------------------------------//
// Crea los codeblock SETGET de las columnas del browse

static function GenCB( oTb, n )
return( { || oTb:FieldGet( n ) } )

//----------------------------------------------------------------------------//
// Pantalla de datos de la tabla

static function PantMuestra( oTb, nTipo )

    local GetList := {}
    local cTipo, cId

    do case
        case nTipo == ID_ALTA
            cTipo := "Insertando"
            cId := "nuevo"
        case nTipo == ID_BORRA
        case nTipo == ID_CONSUTA
        case nTipo == ID_MODIFICA
            cTipo := "Modificando"
            cId := StrNum( oTb:Id )
    end

    SET CURSOR ON

    DispBox( 3, 2, 18, 74, B_BOX )

    @ 04, 03 SAY cTipo + " registro en tabla " + oTb:cName + " - Numero: " + cId

    @ 06, 03 SAY "First....:" GET oTb:First     PICTURE "@K"
    @ 07, 03 SAY "Last.....:" GET oTb:Last      PICTURE "@K"
    @ 08, 03 SAY "Street...:" GET oTb:Street    PICTURE "@K"
    @ 09, 03 SAY "City.....:" GET oTb:City      PICTURE "@K"
    @ 10, 03 SAY "State....:" GET oTb:State     PICTURE "@K"
    @ 11, 03 SAY "Zip......:" GET oTb:Zip       PICTURE "@K"
    @ 12, 03 SAY "Hiredate.:" GET oTb:Hiredate  PICTURE "@K"
    @ 13, 03 SAY "Married..:" GET oTb:Married   PICTURE "@K"
    @ 14, 03 SAY "Age......:" GET oTb:Age       PICTURE "@K"
    @ 15, 03 SAY "Salary...:" GET oTb:Salary    PICTURE "@K"
    @ 16, 03 SAY "Notes:"
    @ 17, 03                  GET oTb:Notes     PICTURE "@K"

return( GetList )

//----------------------------------------------------------------------------//
// Inserta una fila

static procedure Insertar( oTb, oBrw )

    local GetList := {}
    local cPant := SaveScreen( 3, 2, 18, 74 )

    oTb:Blank()

    GetList := PantMuestra( oTb, ID_ALTA )
    READ

    set cursor off

    RestScreen( 3, 2, 18, 74, cPant )

    if LastKey() != K_ESC .and. Updated()
        if oTb:Insert()
            Alert( "Tupla insertada" )
            if Alert( "Refresca el Browse?", { "Si", "No" } ) == 1
                oTb:Refresh()
                oBrw:goBottom()
                oBrw:RefreshAll()
            endif
        endif
    endif

return

//----------------------------------------------------------------------------//
// Modifica la fila actual

static procedure Modificar(oTb,oBrw )

    local GetList := {}
    local nRecNo := oTb:RecNo()
    local cPant := SaveScreen( 3, 2, 18, 74 )

    oTb:Load()

    GetList := PantMuestra( oTb, ID_MODIFICA )
    READ

    set cursor off

    RestScreen( 3, 2, 18, 74, cPant )

    if LastKey() != K_ESC .and. Updated()
        if oTb:Update()
            Alert( StrNum( oTb:AffectedRows() ) + " - tuplas modificadas" )
            if Alert( "Refresca el Browse?", { "Si", "No" } ) == 1
                oTb:Refresh()
                oTb:GoTo( nRecNo )
                oBrw:RefreshAll()
            endif
        endif
    endif

return

//----------------------------------------------------------------------------//
// Borra la fila actual

static procedure Borrar( oTb, oBrw )

    local nRecNo := oTb:RecNo()

    if Alert( "Realmente quieres borrar el registro?", { "Si", "No" } ) == 1
        if oTb:Delete( , 1 )
            Alert( "Borrado en el servidor" )
            if Alert( "Refresca el Browse?", { "Si", "No" } ) == 1
                oTb:Refresh()
                oTb:GoTo( nRecNo )
                oBrw:RefreshAll()
            endif
        endif
    else
        Alert( "No se ha borrado..." )
    endif

return

//----------------------------------------------------------------------------//
// Establece un nuevo orden de visualizacion

static function ElOrden( oTb )

    local i := oTb:FieldCount()
    local aFld := Array( i )
    local n, lRet

    FOR n := 1 TO i
        aFld[ n ] := oTb:FieldName( n )
    NEXT

    DispBox( 5, 9, 10, 25, B_BOX )

    i := 0
    i := AChoice( 6, 10, 9, 24, aFld )

    if lRet := ( i > 0 )
        Alert( "Ordenado por la columna: " + StrNum( i ) + " " + oTb:FieldName( i ) )
        oTb:SetOrderBy( i,, .t. )
    endif

return( lRet )

//----------------------------------------------------------------------------//
// Busca un valor de una columna

static function BuscaValor( oTb )

    local GetList := {}
    local nCol := 0
    local lRet, uVal

    DispBox( 5, 5, 8, 75, B_BOX )

    @ 6, 10 SAY "Entre numero de columna:" GET nCol PICTURE "@K"
    READ

    if nCol > 0 .and. nCol <= oTb:FieldCount()
        uVal := oTb:FieldGet( nCol )

        @ 7, 10 SAY "Entre valor buscado:" GET uVal PICTURE "@K"
        READ

        // Ojo cuando es tipo caracter (x)Harbour mete espacios hasta el final
        // del ancho del campo
        uVal := if( ValType( uVal ) == "C", AllTrim( uVal ), uVal )
// Busqueda blanda
//        lRet := oTb:FindLike( nCol, uVal, .t. )
// Busqueda exacta
        lRet := oTb:Find( nCol, uVal, .t. )
    else
        lRet := .f.
        Alert( "Emtre un n·mero de columna correcto" )
    endif

return( lRet )

//----------------------------------------------------------------------------//


 


Espero que te recuperes y perseveres que seguro que sales ganando :-)
:mrgreen:
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 756
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Pasar a SQL paso a paso para Novatos..

Postby Armando » Sun Jul 27, 2014 3:45 pm

Victor:

Con el debido respeto a todos, creo que te fuiste por el camino más largo, te envíe un correo a
danyleon82 @ hotmail. com con la alternativa garantizada, y no necesitas nada extra, ni compilar
librería alguna, con lo que tienes puedes pasar a SQL vía FWH y ADO.

Además, coincido con Manu, debes cambiarte el switch de DBFs a Tablas SQL. y para nuestra un
botón:

1.- En DBFs muchos asumimos que un archivo ARCHIVOX.DBF es una base de datos pero
2,. En SQL el equivalente a un ARCHIVOX.DBF es una tabla, en SQL sí se maneja el concepto
DATABASE que, en palabras simples, es un contenedor de una o varias TABLAS (DBFs), lo que
no ocurre con DBFs

Abajo encuentras mi correo por si quieres comentar algo más

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
User avatar
Armando
 
Posts: 3061
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Pasar a SQL paso a paso para Novatos..

Postby lafug » Tue Jul 29, 2014 1:38 am

David,

ADO funciona muy bién, postea aqui algún correo y te mando docuementación sobre ADO

saludos
Luis Alfonso Fuentes Guerrero
FWH 11.06 xHarbour 1.2.1 BCC55 WorkShop
User avatar
lafug
 
Posts: 185
Joined: Thu Nov 17, 2005 12:48 am
Location: Santiago, Chile

Re: Pasar a SQL paso a paso para Novatos..

Postby cuatecatl82 » Tue Jul 29, 2014 12:58 pm

Buen dia a todos:

Habia pensado dejar el tema, pero como veo que hay comentarios y más que nada sigo intentando todavia sin extito les comento lo siguiente:

Manu Expósito:
El principal problema que creo que tienes es que sigues pensando en DBF y eso es un error muy grande. El mundo SQL no tiene nada que ver con DBF salvo en que se guarda informacion y se recupera.


Totalmente de acuerdo, son cosas muuuyyy diferentes, peroo... insisto la documentacion de una migracion exitosa desde cero paso a paso todavia se nos queda adeber..

Paco Horta me hizo el favor de regalar un curso en video y mucha documentación sobre SQL, antes de empezar con la practica empezé con la teoria, y estaba conciente de que trabajar con SQL no era lo mismo que con DBF´s..


Armando:
te envíe un correo a
danyleon82 @ hotmail. com con la alternativa garantizada, y no necesitas nada extra, ni compilar
librería alguna, con lo que tienes puedes pasar a SQL vía FWH y ADO.


Recibi tu correo y agradesco mucho tu oferta, me intereso pero por ahora estoy corto de recursos $$.


1.- En DBFs muchos asumimos que un archivo ARCHIVOX.DBF es una base de datos pero
2,. En SQL el equivalente a un ARCHIVOX.DBF es una tabla, en SQL sí se maneja el concepto
DATABASE que, en palabras simples, es un contenedor de una o varias TABLAS (DBFs), lo que
no ocurre con DBFs


El proyecto que tengo usa información que es de cierta forma redundante y esta en varias DBF´s, por esta razon me decidi tratar de migrar a SQL porque soporta el tener un solo archivo como contenedor de varios más,

El chip ya lo habia cambiado, no contaba con que el chip venia fallado, y les explico el porque..

De nuevo decidi probar, estuve revisando videos en youtube, y encontre lo siguiente:

Volvi a formatear con XP Sp3, vuelvo a instalar el motor MySQL y SQLWorkbench para hacer pruebas directamente desde el control de Querys de Oracle, y con la instalación de la ultima version de SQLque es la 5.6.19 tiene un error ya que no se puede conectar en modo localhost, ni con XP ni con W7..

Image
Image

Estoy buscando una version anterior, la 5.5 que al parecer en los videos que vi trabaja sin problemas..

Luis Alfonso:

Mi correo es danyleon82@hotmail.com cualquier documentacion es bien recibida..


/*/*/*/*/*/*/*/*/*
Perdon que vuelva a insistir, pero falta mucha documentacion de las clases para controlar SQL

Mi problema radica en que no se que clase es mejor usar y porque, y su documentacion básica:
Como conectarse a SQL, como comprobar que la conección fue exitosa y apartir de ahi explicar como abrir, crear, y agregar registros a la base de datos en base a la clase se que use..

Saludos y gracias de nuevo..
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Re: Pasar a SQL paso a paso para Novatos..

Postby Daniel Garcia-Gil » Tue Jul 29, 2014 1:36 pm

Hola

lo importante es no desesperarse, todo cambio lleva un tiempo, muchos ya lo han logrado, muchas veces dejo de reponder cosas de dolphin en el foro solo para incitar a otros usuarios intervenir en el uso de la libreria, pregunta todo lo que quieras por el foro, mientras mas preguntas existan mas nos documentamos...
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Pasar a SQL paso a paso para Novatos..

Postby cuatecatl82 » Tue Jul 29, 2014 1:38 pm

Confirmado acabo de instalar MySQL 5.5 y Workbench 6.1 CE y ya pude acceder desde consola...

Image
Image

Intentare hacer pruebas..
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Re: Pasar a SQL paso a paso para Novatos..

Postby cmsoft » Tue Jul 29, 2014 2:26 pm

Buenisimo Victor!!
No te vas a arrepentir de haber insistido!! Te puedo asegurar que dentro de unos meses te vas a preguntar ¿Como no cambie antes?!!!!
Cualquier duda aqui para responderte en todo lo que pueda ayudarte
User avatar
cmsoft
 
Posts: 1189
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Pasar a SQL paso a paso para Novatos..

Postby sysctrl2 » Tue Jul 29, 2014 6:25 pm

Eso es todo Cuate,
y como dice Daniel, lo importante es no desesperarte,
lo mas dificil para mi tambien fue montar la plataforma
una vez hecho eso, lo demas es papita jeje,
por cierto yo uso el mysql 5.0 y 5.1, sin problemas.
saludos..
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
sysctrl2
 
Posts: 951
Joined: Mon Feb 05, 2007 7:15 pm

Re: Pasar a SQL paso a paso para Novatos..

Postby cuatecatl82 » Tue Jul 29, 2014 8:36 pm

Gracias a todos por sus animos, con la ayuda de ustedes los masters del SQL saldre adelante:

Ok ya practique y me empape con SQL desde Workbench.. ahora me voy con TDolphin y tengo dudas en conocer cual es el proceso a seguir para usarlos desde Fivewin..

Creo que lo mejor es usar TDolphin del Master Daniel:

1.- Como me conecto en forma local y remota a SQL.
2.- Que es primero: Conectarse a SQL o crear las Bases de Datos.
3.- Como abrir una tabla de varias en una base de datos.
4.- Una vez terminada da usar la consulta como cerrar la tabla usada.

Una vez controlado esto creo que es mas facil el agregar, modificar y borrar registros... Buscando en el foro encontre esto:
http://fivetechsupport.com/forums/viewtopic.php?f=6&t=20705&hilit=dolphin#p109940
a lo cual me uno no solo para mi si no para muchos que intentan saltar a SQL pero que no lo logran, siento que es urgente una documentacion de TDolphin mas extensa para facilitar mas el camino..

Gracias y en espera de sus ejemplos..
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

PreviousNext

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 80 guests