FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Clase TTABLE insertar Registros en Tablas SQL Lexico XBASE
Posts: 492
Joined: Wed Nov 16, 2005 12:03 PM
Clase TTABLE insertar Registros en Tablas SQL Lexico XBASE
Posted: Mon Mar 09, 2015 07:14 AM
/*
// Clase Ttable
// Creado por Juan Navas jnavas@datapronet.com
// Objetivo: Insertar/Modificar Registros en Base de datos SQL mediante Objeto
// Lee todos los archivos del directorio y los guarda en la tabla MYTABLE, por ahora solo inserta registros.
// Un proximo release incluira la funcionalidad para modificar y eliminaci贸n registros
// Requiere eagle1.lib , tambien se puede utilizar Otro gestor de base de datos u Odbc
*/

#include "FiveWin.ch"

STATIC oServer,oDb,bSqlDate,cTypeBD

FUNCTION MAIN()
LOCAL cIp :="localhost"
LOCAL cLogin:="root"
LOCAL cPass :=""
LOCAL oTable
LOCAL aFiles:=DIRECTORY("*.*"),I

SET DATE FREN
SET CENTURY ON

cTypeBD:="MYSQL"

IF !CONECTAR(cIp,cLogin,cPass)
SALIR()
RETURN NIL
ENDIF

// Conversion de Date Hacia Caracter
bSqlDate:={|nD,nM,nA|STRZERO(nA,4)+""+STRZERO(nM,2)+""+STRZERO(nD,2)}

SETDB("PRUEBAS") // Crea la BD PRUEBAS
ISTABLAS() // Verifica la Existencia de las Tablas

oTable:=OpenTable("SELECT * FROM MYTABLA",.F.) // Abre objeto Tabla

FOR I=1 TO LEN(aFiles)

oTable:AppendBlank() // Utilizara Insert INTO
oTable:Replace("FILE",aFiles[I,1]) // Asigna Valores
oTable:Replace("DATE",aFiles[I,3])
oTable:Replace("SIZE",aFiles[I,2])
oTable:Replace("LOGICO",.T.)

IF !oTable:Commit() // Ejecutar INSERT INTO
EXIT
ENDIF

NEXT I

oTable:End()

? oTable:cSqlExec,LSTR(LEN(aFiles))+CRLF+"Archivos registrados en tabla MYTABLA"

RETURN NIL

FUNCTION OpenTable(cSql,lLoad,oDataBase)

DEFAULT oDataBase:=oDb

RETURN TTable():New(cSql,lLoad,oDataBase)

CLASS Ttable

DATA oDataBase
DATA oCursor

DATA lAppend INIT .T.
DATA aBuffer INIT {}

DATA cWhere INIT ""
DATA cTable
DATA cSql
DATA cSqlExec INIT ""

METHOD New(cSql,lLoad,oDataBase) CONSTRUCTOR
METHOD Replace(cField,uValue)
METHOD Commit(cWhere)
METHOD AppendBlank() INLINE ::=.T.
METHOD InsertInto()
METHOD HandleEvent(nMsg, nWParam, nLParam ) EXTERN ;
WndHandleEvent( Self, nMsg, nWParam, nLParam )

METHOD End()

ENDCLASS

METHOD New( cSql,lLoad, oDataBase) CLASS Ttable

DEFAULT lLoad:=.T.

::oDatabase:=oDataBase
::cTable :=SQLTABLENAME(cSql)

? cSql,::cTable

RETURN SELF

METHOD Replace(cField,uValue) CLASS TTABLE
LOCAL nAt

cField:=UPPE(ALLTRIM(cField))
nAt:=ASCAN(::aBuffer,{|a,n|a[1]=cField})

IF nAt=0
AADD(::aBuffer,{cField,uValue})
ELSE
::aBuffer[nAt,2]:=uValue
ENDIF

RETURN NIL

METHOD COMMIT(cWhere) CLASS TTABLE

IF ::lAppend
RETURN ::INSERTINTO()
ENDIF

RETURN .T.

METHOD INSERTINTO() CLASS TTABLE
LOCAL uValue,cField,cType,nLen,I,cSql
LOCAL cFields:="",cValues:=""

FOR I := 1 TO LEN( ::aBuffer )

cField := ::aBuffer[I,1]
uValue := ::aBuffer[I,2]
uValue :=CTOSQL(uValue)
cFields:=cFields+IF(Empty(cFields),"",",")+cField
cValues:=cValues+IF(Empty(cValues),"",",")+uValue

NEXT

cSql := "INSERT INTO " + ::cTable + " ("+cFields+") VALUES ("+cValues+")"

// Esta ejecuci贸n Clase TMSCONNET de Eagle
IF ("TMS"$oServer:Classname()) .AND. !oDb:ExecSQL(cSql)
MsgAlert("Sentencia Rechazada "+cSql)
RETURN .F.
ENDIF

::=cSql

RETURN .T.

METHOD End()
RETURN NIL

EXIT PROCEDURE SALIR()

IF ValType(oDb)="O"
oDb:Close()
ENDIF

IF ValType(oServer)="O"
oServer:Close()
ENDIF

RETURN

STATIC FUNCTION CONECTAR(cIp,cLogin,cPass,nPort,lError)

cIp := ALLTRIM(cIp )
cLogin := ALLTRIM(cLogin)
cPass := ALLTRIM(cPass )

DEFAULT nPort :=3306,;
lError:=.F.

CursorWait()


IF cTypeBD="MYSQL"

oServer:= TMSConnect():New() // Inicia el objeto Conexion Mediante la clase Eagle

oServer:SetAutoError( lError )

IF oServer:Connect( cIp, cLogin , cPass , NIL, nPort )
oServer:Reconnect()
ELSE
oServer:Close()
MsgAlert( "No hay conexi贸n con "+cIp )
RETURN .F.
ENDIF

ENDIF

RETURN .T.

STATIC FUNCTION SETDB(cDataBase)

IF "TMS"$oServer:Classname()

IF !oServer:ExistDb(cDataBase)
oServer:CreateDB(cDataBase)
ENDIF

oDb:=TMSDataBase():New( oServer, cDataBase, .t. )
oDb:Use()
oDb:Select()

ENDIF

RETURN .T.


FUNCTION ISTABLAS()
LOCAL aStruct:={}
LOCAL cTable:="MYTABLA"

IF "TMS"$oServer:Classname() .AND. !oDb:ExistTable(cTable)
AADD(aStruct,{"FILE", "C",250,0})
AADD(aStruct,{"DATE", "D",8 ,0})
AADD(aStruct,{"SIZE", "N",12 ,0})
AADD(aStruct,{"LOGICO","N",1 ,0}) // Sera Logico Un Digito
oDb:CreateTable( cTable, aStruct, NIL )
ENDIF

RETURN .T.

STATIC FUNCTION STRSQL(uValue) // Quita el slash por Chr(28)

IF ValType(uValue)="D" // Fecha en SQL
RETURN SQLDATE(uValue)
ENDIF

IF ValType(uValue)="L"
RETURN IIF(uValue,"1","0")
ENDIF

IF ValType(uValue)="N"
uValue:=ALLTRIM(STR(uValue))
ENDIF

RETURN uValue

STATIC FUNCTION SQLDATE(dFecha)
LOCAL nD,nM,nA

IF !Empty(bSqlDate) .AND. ValType(dFecha)="D"
nD:=DAY(dFecha)
nM:=MONTH(dFecha)
nA:=YEAR(dFecha)
dFecha:=EVAL(bSqlDate,nD,nM,nA)
RETURN dFecha
ENDIF

RETURN DTOS(dFecha)

STATIC FUNCTION SQLTABLENAME(cSql)
LOCAL cTable
cTable :=ALLTRIM(SUBS(cSql,AT(" FROM ",UPPE(cSql))+5,LEN(cSql)))
cTable :=IIF(" " $cTable,LEFT(cTable,AT(" " ,cTable)),cTable)
cTable :=IIF(CRLF$cTable,LEFT(cTable,AT(CRLF,cTable)),cTable)
RETURN cTable

/*
// Genera WHERE, Entre Campos y Valores
*/
FUNCTION GetWhere(cSigno,uValue,cValtype,lAlltrim)
LOCAL cWhere:=""

DEFAULT cValType:=ValType(uValue)
DEFAULT cSigno :="=",lAlltrim:=.T.

IF EMPTY(uValue).AND.LEN(cSigno)="="
uValue:=cSigno
cSigno:="="
ENDIF

IF ValType(uValue)="C"
uValue:=STRSQL(ALLTRIM(uValue))
ENDIF

DO CASE

CASE cValType="N" .OR. cValType="L"

cWhere:=cSigno+STRSQL(uValue)

CASE cValType="D"

cWhere:=cSigno+CTOSQL(uValue)

IF cTypeBD="MSSQL" .AND. "NULL"$cWhere
cWhere:=STRTRAN(cWhere,"="," IS ")
ENDIF

IF cTypeBD="MSSQL" .AND. "NULL"$cWhere
cWhere:=STRTRAN(cWhere,"<>"," IS NOT ")
ENDIF

OTHE

uValue:=IIF( ValType(uValue)="C",ALLTRIM(uValue) , uValue )
uValue:=IIF( ValType(uValue)="C",STRSQLOFF(uValue),STRSQL(uValue))


IF "LIKE["$cSigno

cSigno:=STRTRAN(cSigno,"X",uValue)
cSigno:=STRTRAN(cSigno,"["," '")
cSigno:=STRTRAN(cSigno,"]","'")

IF "NOT_LIKE"$cSigno
cSigno:=STRTRAN(cSigno,"NOT_LIKE"," NOT LIKE")
ENDIF

cWhere:=" "+cSigno+" "

ELSE

cWhere:=cSigno+"'"+uValue+"'"

ENDIF

ENDCASE

RETURN cWhere

FUNCTION CTOSQL(uValue)

DO CASE

CASE ValType(uValue)="C"
uValue:=STRSQL(uValue)
CASE ValType(uValue)="N"
uValue:=ALLTRIM(STR(uValue))
RETURN uValue
CASE ValType(uValue)="L"
RETURN IIF( uValue,"1","0")
CASE ValType(uValue)="D"
IF EMPTY(uValue) .AND. cTypeBD="MSSQL"
RETURN 'NULL'
ENDIF
uValue:=SQLDATE(uValue)

ENDCASE

RETURN "'"+ALLTRIM(uValue)+"'"

FUNCTION STRSQLOFF(uValue)
// Quita el slash por Chr(28)

IF ValType(uValue)="C" .AND. cTypeBD="MSSQL" .AND. CHR(250)$uValue
uValue:=STRTRAN(uValue,CHR(250),"'")
RETURN uValue
ENDIF

IF ValType(uValue)="C".AND. CHR(29)$uValue
uValue:=STRTRAN(uValue,CHR(29),"'") // "CUALQUIER COSA SDFSDFSDFD "+CRLF //+MEMOREAD("\DWH\PRG\WINDOW.PRG")
ENDIF

IF ValType(uValue)="C" .AND. (CHR(28)$uValue .OR. CHR(29)$uValue)
uValue:=STRTRAN(uValue,CHR(28),"\")
uValue:=STRTRAN(uValue,CHR(29),"'")
ENDIF

RETURN uValue

FUNCTION lstr(nValue)
RETURN ALLTRIM(STR(nValue))
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: Clase TTABLE insertar Registros en Tablas SQL Lexico XBASE
Posted: Mon Mar 09, 2015 10:40 PM

Saludos Juan, tendras algo para hacer backup-restore de tablas mysql.? gracias, saludos... :shock:

Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 492
Joined: Wed Nov 16, 2005 12:03 PM
Re: Clase TTABLE insertar Registros en Tablas SQL Lexico XBASE
Posted: Tue Mar 10, 2015 12:25 AM
joseluisysturiz wrote:Saludos Juan, tendras algo para hacer backup-restore de tablas mysql.? gracias, saludos... :-)

Jose Luis
Gracias por la confianza
Con respecto a los respaldos de bases de datos recomiendo "MySQL Administrator", desde hace a帽os implemente MYSQLDUMP no era facil recuperar los respaldos.
Te enviare un archivo.bat que se ejecuta desde tareas autom谩ticas, luego se comprime con pkzip y finalmente se sube a un servidor FTP. En mi caso utilizo tablas mediante INNODB con integridad referencial donde no existe la figura de tablas sino un solo repositorio.
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: Clase TTABLE insertar Registros en Tablas SQL Lexico XBASE
Posted: Tue Mar 10, 2015 02:26 AM
jnavas wrote:
joseluisysturiz wrote:Saludos Juan, tendras algo para hacer backup-restore de tablas mysql.? gracias, saludos... :-)

Jose Luis
Gracias por la confianza
Con respecto a los respaldos de bases de datos recomiendo "MySQL Administrator", desde hace a帽os implemente MYSQLDUMP no era facil recuperar los respaldos.
Te enviare un archivo.bat que se ejecuta desde tareas autom谩ticas, luego se comprime con pkzip y finalmente se sube a un servidor FTP. En mi caso utilizo tablas mediante INNODB con integridad referencial donde no existe la figura de tablas sino un solo repositorio.

Juan, nos conocemos, hemos conversado y hasta trabaje para datapro hace a帽os, con Joel en la hoyada y un tiempo en los dos caminos, disculpa si sone con mucha confianza, se que no te acuerdas de todos los que hemos pasado por datapro y como trabaje mas con Joel(proandsys) y en sabana grande, que contigo, menos me recordaras...hace bastante tiempo hablamos en tu oficina. Estoy haciendo pruebas directamente con mysqldump, tambien probe con la clase de Daniel TDolphin que hace muy bien el respaldo y restauracion, pero ahorita presenta un detalle que no he podido resolver, lo comente aca pero parece a nadie le pasa o usan otros metodos para respaldo-restaurar, igual gracias, saludos... :-)
Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 492
Joined: Wed Nov 16, 2005 12:03 PM
Re: Clase TTABLE insertar Registros en Tablas SQL Lexico XBASE
Posted: Tue Mar 10, 2015 09:17 AM
joseluisysturiz wrote:
jnavas wrote:
joseluisysturiz wrote:Saludos Juan, tendras algo para hacer backup-restore de tablas mysql.? gracias, saludos... :-)

Jose Luis
Gracias por la confianza
Con respecto a los respaldos de bases de datos recomiendo "MySQL Administrator", desde hace a帽os implemente MYSQLDUMP no era facil recuperar los respaldos.
Te enviare un archivo.bat que se ejecuta desde tareas autom谩ticas, luego se comprime con pkzip y finalmente se sube a un servidor FTP. En mi caso utilizo tablas mediante INNODB con integridad referencial donde no existe la figura de tablas sino un solo repositorio.

Juan, nos conocemos, hemos conversado y hasta trabaje para datapro hace a帽os, con Joel en la hoyada y un tiempo en los dos caminos, disculpa si sone con mucha confianza, se que no te acuerdas de todos los que hemos pasado por datapro y como trabaje mas con Joel(proandsys) y en sabana grande, que contigo, menos me recordaras...hace bastante tiempo hablamos en tu oficina. Estoy haciendo pruebas directamente con mysqldump, tambien probe con la clase de Daniel TDolphin que hace muy bien el respaldo y restauracion, pero ahorita presenta un detalle que no he podido resolver, lo comente aca pero parece a nadie le pasa o usan otros metodos para respaldo-restaurar, igual gracias, saludos... :-)

Jos茅 Luis,

Gracias por tu comunicado y por la confianza para escribirme y darme detalles de la experiencia.
En AdaptaPro contamos con diversos consultores buscando personas con experiencia en proyectos de implementaci贸n y Programaci贸n.
Sobre los respaldos con MySQL ya tenemos mas de 10 a帽os trabajando con MYSQL desde la Version 3,x y nuestros consultores ya han madurado experiencia con diversas aplicaciones para los respaldos y recuperacion de datos, aun cuando hacen respaldos en servidores Windows y luego lo recuperar en Linux (Con previa definicion de Idiomas), versiones, integridad referencial, entre otras experiencias.

Hoy cuando llegue Horacio "tecnico y DBA" le pedire los script de los bat que hacen los respaldos de las bases de datos. Hemos probado varias opciones y los tiempos de respuestas debe ser optimos y es aqui donde "MySQL Administrator tiene la ventaja", elgunos respaldos tardan horas en ser recuperados.

puedes escribirme a jnavas@datapronet.com mi tel 0414-3000518 0414-2931707
Cualquier pregunta sobre programacion, podras hacerlo en este excelente foro.
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Clase TTABLE insertar Registros en Tablas SQL Lexico XBASE
Posted: Mon Nov 12, 2018 08:56 PM
jnavas wrote:/*
// Clase Ttable
// Creado por Juan Navas jnavas@datapronet.com
// Objetivo: Insertar/Modificar Registros en Base de datos SQL mediante Objeto
// Lee todos los archivos del directorio y los guarda en la tabla MYTABLE, por ahora solo inserta registros.
// Un proximo release incluira la funcionalidad para modificar y eliminaci贸n registros
// Requiere eagle1.lib , tambien se puede utilizar Otro gestor de base de datos u Odbc
*/

#include "FiveWin.ch"

STATIC oServer,oDb,bSqlDate,cTypeBD

FUNCTION MAIN()
LOCAL cIp :="localhost"
LOCAL cLogin:="root"
LOCAL cPass :=""
LOCAL oTable
LOCAL aFiles:=DIRECTORY("*.*"),I

SET DATE FREN
SET CENTURY ON

cTypeBD:="MYSQL"

IF !CONECTAR(cIp,cLogin,cPass)
SALIR()
RETURN NIL
ENDIF

// Conversion de Date Hacia Caracter
bSqlDate:={|nD,nM,nA|STRZERO(nA,4)+""+STRZERO(nM,2)+""+STRZERO(nD,2)}

SETDB("PRUEBAS") // Crea la BD PRUEBAS
ISTABLAS() // Verifica la Existencia de las Tablas

oTable:=OpenTable("SELECT * FROM MYTABLA",.F.) // Abre objeto Tabla

FOR I=1 TO LEN(aFiles)

oTable:AppendBlank() // Utilizara Insert INTO
oTable:Replace("FILE",aFiles[I,1]) // Asigna Valores
oTable:Replace("DATE",aFiles[I,3])
oTable:Replace("SIZE",aFiles[I,2])
oTable:Replace("LOGICO",.T.)

IF !oTable:Commit() // Ejecutar INSERT INTO
EXIT
ENDIF

NEXT I

oTable:End()

? oTable:cSqlExec,LSTR(LEN(aFiles))+CRLF+"Archivos registrados en tabla MYTABLA"

RETURN NIL

FUNCTION OpenTable(cSql,lLoad,oDataBase)

DEFAULT oDataBase:=oDb

RETURN TTable():New(cSql,lLoad,oDataBase)

CLASS Ttable

DATA oDataBase
DATA oCursor

DATA lAppend INIT .T.
DATA aBuffer INIT {}

DATA cWhere INIT ""
DATA cTable
DATA cSql
DATA cSqlExec INIT ""

METHOD New(cSql,lLoad,oDataBase) CONSTRUCTOR
METHOD Replace(cField,uValue)
METHOD Commit(cWhere)
METHOD AppendBlank() INLINE ::=.T.
METHOD InsertInto()
METHOD HandleEvent(nMsg, nWParam, nLParam ) EXTERN ;
WndHandleEvent( Self, nMsg, nWParam, nLParam )

METHOD End()

ENDCLASS

METHOD New( cSql,lLoad, oDataBase) CLASS Ttable

DEFAULT lLoad:=.T.

::oDatabase:=oDataBase
::cTable :=SQLTABLENAME(cSql)

? cSql,::cTable

RETURN SELF

METHOD Replace(cField,uValue) CLASS TTABLE
LOCAL nAt

cField:=UPPE(ALLTRIM(cField))
nAt:=ASCAN(::aBuffer,{|a,n|a[1]=cField})

IF nAt=0
AADD(::aBuffer,{cField,uValue})
ELSE
::aBuffer[nAt,2]:=uValue
ENDIF

RETURN NIL

METHOD COMMIT(cWhere) CLASS TTABLE

IF ::lAppend
RETURN ::INSERTINTO()
ENDIF

RETURN .T.

METHOD INSERTINTO() CLASS TTABLE
LOCAL uValue,cField,cType,nLen,I,cSql
LOCAL cFields:="",cValues:=""

FOR I := 1 TO LEN( ::aBuffer )

cField := ::aBuffer[I,1]
uValue := ::aBuffer[I,2]
uValue :=CTOSQL(uValue)
cFields:=cFields+IF(Empty(cFields),"",",")+cField
cValues:=cValues+IF(Empty(cValues),"",",")+uValue

NEXT

cSql := "INSERT INTO " + ::cTable + " ("+cFields+") VALUES ("+cValues+")"

// Esta ejecuci贸n Clase TMSCONNET de Eagle
IF ("TMS"$oServer:Classname()) .AND. !oDb:ExecSQL(cSql)
MsgAlert("Sentencia Rechazada "+cSql)
RETURN .F.
ENDIF

::=cSql

RETURN .T.

METHOD End()
RETURN NIL

EXIT PROCEDURE SALIR()

IF ValType(oDb)="O"
oDb:Close()
ENDIF

IF ValType(oServer)="O"
oServer:Close()
ENDIF

RETURN

STATIC FUNCTION CONECTAR(cIp,cLogin,cPass,nPort,lError)

cIp := ALLTRIM(cIp )
cLogin := ALLTRIM(cLogin)
cPass := ALLTRIM(cPass )

DEFAULT nPort :=3306,;
lError:=.F.

CursorWait()


IF cTypeBD="MYSQL"

oServer:= TMSConnect():New() // Inicia el objeto Conexion Mediante la clase Eagle

oServer:SetAutoError( lError )

IF oServer:Connect( cIp, cLogin , cPass , NIL, nPort )
oServer:Reconnect()
ELSE
oServer:Close()
MsgAlert( "No hay conexi贸n con "+cIp )
RETURN .F.
ENDIF

ENDIF

RETURN .T.

STATIC FUNCTION SETDB(cDataBase)

IF "TMS"$oServer:Classname()

IF !oServer:ExistDb(cDataBase)
oServer:CreateDB(cDataBase)
ENDIF

oDb:=TMSDataBase():New( oServer, cDataBase, .t. )
oDb:Use()
oDb:Select()

ENDIF

RETURN .T.


FUNCTION ISTABLAS()
LOCAL aStruct:={}
LOCAL cTable:="MYTABLA"

IF "TMS"$oServer:Classname() .AND. !oDb:ExistTable(cTable)
AADD(aStruct,{"FILE", "C",250,0})
AADD(aStruct,{"DATE", "D",8 ,0})
AADD(aStruct,{"SIZE", "N",12 ,0})
AADD(aStruct,{"LOGICO","N",1 ,0}) // Sera Logico Un Digito
oDb:CreateTable( cTable, aStruct, NIL )
ENDIF

RETURN .T.

STATIC FUNCTION STRSQL(uValue) // Quita el slash por Chr(28)

IF ValType(uValue)="D" // Fecha en SQL
RETURN SQLDATE(uValue)
ENDIF

IF ValType(uValue)="L"
RETURN IIF(uValue,"1","0")
ENDIF

IF ValType(uValue)="N"
uValue:=ALLTRIM(STR(uValue))
ENDIF

RETURN uValue

STATIC FUNCTION SQLDATE(dFecha)
LOCAL nD,nM,nA

IF !Empty(bSqlDate) .AND. ValType(dFecha)="D"
nD:=DAY(dFecha)
nM:=MONTH(dFecha)
nA:=YEAR(dFecha)
dFecha:=EVAL(bSqlDate,nD,nM,nA)
RETURN dFecha
ENDIF

RETURN DTOS(dFecha)

STATIC FUNCTION SQLTABLENAME(cSql)
LOCAL cTable
cTable :=ALLTRIM(SUBS(cSql,AT(" FROM ",UPPE(cSql))+5,LEN(cSql)))
cTable :=IIF(" " $cTable,LEFT(cTable,AT(" " ,cTable)),cTable)
cTable :=IIF(CRLF$cTable,LEFT(cTable,AT(CRLF,cTable)),cTable)
RETURN cTable

/*
// Genera WHERE, Entre Campos y Valores
*/
FUNCTION GetWhere(cSigno,uValue,cValtype,lAlltrim)
LOCAL cWhere:=""

DEFAULT cValType:=ValType(uValue)
DEFAULT cSigno :="=",lAlltrim:=.T.

IF EMPTY(uValue).AND.LEN(cSigno)="="
uValue:=cSigno
cSigno:="="
ENDIF

IF ValType(uValue)="C"
uValue:=STRSQL(ALLTRIM(uValue))
ENDIF

DO CASE

CASE cValType="N" .OR. cValType="L"

cWhere:=cSigno+STRSQL(uValue)

CASE cValType="D"

cWhere:=cSigno+CTOSQL(uValue)

IF cTypeBD="MSSQL" .AND. "NULL"$cWhere
cWhere:=STRTRAN(cWhere,"="," IS ")
ENDIF

IF cTypeBD="MSSQL" .AND. "NULL"$cWhere
cWhere:=STRTRAN(cWhere,"<>"," IS NOT ")
ENDIF

OTHE

uValue:=IIF( ValType(uValue)="C",ALLTRIM(uValue) , uValue )
uValue:=IIF( ValType(uValue)="C",STRSQLOFF(uValue),STRSQL(uValue))


IF "LIKE["$cSigno

cSigno:=STRTRAN(cSigno,"X",uValue)
cSigno:=STRTRAN(cSigno,"["," '")
cSigno:=STRTRAN(cSigno,"]","'")

IF "NOT_LIKE"$cSigno
cSigno:=STRTRAN(cSigno,"NOT_LIKE"," NOT LIKE")
ENDIF

cWhere:=" "+cSigno+" "

ELSE

cWhere:=cSigno+"'"+uValue+"'"

ENDIF

ENDCASE

RETURN cWhere

FUNCTION CTOSQL(uValue)

DO CASE

CASE ValType(uValue)="C"
uValue:=STRSQL(uValue)
CASE ValType(uValue)="N"
uValue:=ALLTRIM(STR(uValue))
RETURN uValue
CASE ValType(uValue)="L"
RETURN IIF( uValue,"1","0")
CASE ValType(uValue)="D"
IF EMPTY(uValue) .AND. cTypeBD="MSSQL"
RETURN 'NULL'
ENDIF
uValue:=SQLDATE(uValue)

ENDCASE

RETURN "'"+ALLTRIM(uValue)+"'"

FUNCTION STRSQLOFF(uValue)
// Quita el slash por Chr(28)

IF ValType(uValue)="C" .AND. cTypeBD="MSSQL" .AND. CHR(250)$uValue
uValue:=STRTRAN(uValue,CHR(250),"'")
RETURN uValue
ENDIF

IF ValType(uValue)="C".AND. CHR(29)$uValue
uValue:=STRTRAN(uValue,CHR(29),"'") // "CUALQUIER COSA SDFSDFSDFD "+CRLF //+MEMOREAD("\DWH\PRG\WINDOW.PRG")
ENDIF

IF ValType(uValue)="C" .AND. (CHR(28)$uValue .OR. CHR(29)$uValue)
uValue:=STRTRAN(uValue,CHR(28),"\")
uValue:=STRTRAN(uValue,CHR(29),"'")
ENDIF

RETURN uValue

FUNCTION lstr(nValue)
RETURN ALLTRIM(STR(nValue))


Hola Juan, como te va?

Ya tienes un release para este programa que permita Modificar y Eliminar ?

Gracias

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 492
Joined: Wed Nov 16, 2005 12:03 PM
Re: Clase TTABLE insertar Registros en Tablas SQL Lexico XBASE
Posted: Tue Nov 13, 2018 12:20 AM

Saludos
Afirmativo
La clase realiza UPDATE si tiene registros,

oTable:=OpenTable(cSql)

IF oTable:RecCount()=0
oTable:AppendBlank()
ENDIF

oTable:Replace("CAMPO1,nValor)
oTable:Commit(oTable:cWhere) // Si oTable:cWhere esta vacio, INSERT INTO FIELDS,VALUES, caso contrario UPDATE TABLE SET
oTable:End()

Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Clase TTABLE insertar Registros en Tablas SQL Lexico XBASE
Posted: Tue Nov 13, 2018 12:23 AM
jnavas wrote:Saludos
Afirmativo
La clase realiza UPDATE si tiene registros,

oTable:=OpenTable(cSql)

IF oTable:RecCount()=0
oTable:AppendBlank()
ENDIF

oTable:Replace("CAMPO1,nValor)
oTable:Commit(oTable:cWhere) // Si oTable:cWhere esta vacio, INSERT INTO FIELDS,VALUES, caso contrario UPDATE TABLE SET
oTable:End()


La acabo de compilar y genero error por esto

Code (fw): Select all Collapse
oServer:= TMSConnect():New() // Inicia el objeto Conexion Mediante la clase Eagle

oServer:SetAutoError( lError )

IF oServer:Connect( cIp, cLogin , cPass , NIL, nPort )
//oServer:Reconnect() 聽 // SE DEBE COMENTAR PARA QUE FUNCIONE

ELSE
oServer:Close()
MsgAlert( "No hay conexion con "+cIp )
RETURN .F.
ENDIF



Comenta
oServer:Reconnect()

para que funcione

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Clase TTABLE insertar Registros en Tablas SQL Lexico XBASE
Posted: Tue Nov 13, 2018 12:44 AM
jnavas wrote:Saludos
Afirmativo
La clase realiza UPDATE si tiene registros,

oTable:=OpenTable(cSql)

IF oTable:RecCount()=0
oTable:AppendBlank()
ENDIF

oTable:Replace("CAMPO1,nValor)
oTable:Commit(oTable:cWhere) // Si oTable:cWhere esta vacio, INSERT INTO FIELDS,VALUES, caso contrario UPDATE TABLE SET
oTable:End()


En la clase no aparece este metodo

Tendras la clase actualizada con los metodos faltantes (UPDATE y DELETE ) ?

Gracias

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 492
Joined: Wed Nov 16, 2005 12:03 PM
Re: Clase TTABLE insertar Registros en Tablas SQL Lexico XBASE
Posted: Tue Nov 13, 2018 02:25 AM

Compin,
Puedes ver el metodo Commit
METHOD Commit(cWhere)

Para eliminar registros utilizo funci贸n SQLDELETE(cTable,cInner,cWhere,oDb)

Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Clase TTABLE insertar Registros en Tablas SQL Lexico XBASE
Posted: Wed Nov 14, 2018 10:30 PM
Hola Juan, me alegro mucho de lo contento que est谩s con la vieja Eagle1...
E1 tiene un metodo para hacer copias/restauracio de una bases de datos:
Mira este ejemplo y el metod export():

Code (fw): Select all Collapse
//----------------------------------------------------------------------------//
// 聽AUTOR.....: Manuel Exp贸sito Su谩rez 聽 Soft4U 2002-2012 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 //
// 聽eMail.....: <!-- e --><a href="mailto:messof@gmail.com">messof@gmail.com</a><!-- e --> 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽//
// 聽CLASE.....: Pt15.prg 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽//
// 聽FECHA MOD.: 01/10/2012 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽//
// 聽VERSION...: 7.00 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽//
// 聽PROPOSITO.: Ejemplo de mantenimiento simple de una tabla 聽 聽 聽 聽 聽 聽 聽 聽 聽//
//----------------------------------------------------------------------------//

//-- 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 cHost := space( 20 )
聽 聽 local cUser := space( 20 )
聽 聽 local cPwd := space( 20 )
聽 聽 local cDb := space( 20 )
聽 聽 local cTable := space( 20 )
聽 聽 local oCon, oDb
聽 聽 local aCargo, nCargo
聽 聽 local GetList := {}

聽 聽 SET DATE FORMAT TO "DD/MM/YYYY"

聽 聽 cls

聽 聽 @ 10, 10 SAY "Host..........:" GET cHost
聽 聽 @ 11, 10 SAY "User..........:" GET cUser
聽 聽 @ 12, 10 SAY "Password......:" GET cPwd
聽 聽 READ

聽 聽 cls

聽 聽 cHost := AllTrim( cHost )
聽 聽 cUser := AllTrim( cUser )
聽 聽 cPwd := AllTrim( cPwd )
聽 聽 cDb := AllTrim( cDb )

聽 聽 oCon := TMSConnect():New()

聽 聽 oCon:SetAutoError( .f. )

聽 聽 // Intentamos la conexion
聽 聽 if oCon:Connect( cHost, cUser, cPwd )
聽 聽 聽 聽 aCargo := oCon:ListDataBases()
聽 聽 聽 聽 @ 2, 9 SAY "Elige una Bases de Dato para exportar"
聽 聽 聽 聽 DispBox( 3, 9, 21, 40 )
聽 聽 聽 聽 nCargo := AChoice( 4, 10, 20, 39, aCargo )
聽 聽 聽 聽 cDb := aCargo[ nCargo ]
聽 聽 聽 聽 @ 23, 09 SAY "La Bases de Datos selecionada es " + cDb
聽 聽 聽 聽 oCon:SelectDataBase( cDb )
聽 聽 聽 聽 oCon:oDataBase:Export()
聽 聽 聽 聽 Alert( "La copia se ha efectuado con el nombre: " + ;
聽 聽 聽 聽 聽 聽 聽 聽 oCon:oDataBase:cBakFileName )
聽 聽 else
聽 聽 聽 聽 Alert( "No se pudo conectar..." )
聽 聽 endif

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

return
______________________________________________________________________________

Sevilla - Andaluc铆a
Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Clase TTABLE insertar Registros en Tablas SQL Lexico XBASE
Posted: Wed Nov 14, 2018 10:33 PM
Juan en Eagle1 hay una RDD para usar los camandos DB...() de las dbf directamente en MySQL
E1RDD
mira este ejemplo:
Code (fw): Select all Collapse
//---------------------------------------------------------------------------//
//  AUTOR.....: Manuel Exp贸sito Su谩rez   Soft4U 2002-2010                    //
//  eMail.....: <!-- e --><a href="mailto:messoft@gmail.com">messoft@gmail.com</a><!-- e -->                                            //
//  CLASE.....: TMyTable                                                     //
//  FECHA MOD.: 11/05/2010                                                   //
//  VERSION...: 6.00                                                         //
//  PROPOSITO.: Ejemplo uso E1RDD de Egle1 + FW con Browse de FW             //
//---------------------------------------------------------------------------//

#include "Eagle1.ch"
#include "FiveWin.ch"
#include "dtpicker.ch"
#include "calendar.ch"

//---------------------------------------------------------------------------//
// Son estaticas para que sean visibles desde todo el PRG un poco por
// comodidad

static oConnect     // Objeto conexion
static nWA := 0     // Arera de trabajo

static oWnd         // Objetos de FWH

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

function main()

    SET DATE FORMAT TO "DD/MM/YYYY"

    if AbrirTodo()

        DEFINE WINDOW oWnd FROM 4, 4 TO 40, 120 ;
            TITLE "Ejemplo de manteniento de una tabla con Eagle1 y FWH" ;
            MENU BuildMenu()

            SET MESSAGE OF oWnd NOINSET;
                TO oConnect:cVersion + " por " + oConnect:cAuthor ;
                CLOCK DATE

        ACTIVATE WINDOW oWnd

    else

        Salir()

    endif

return( nil )

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

function BuildMenu()

   local oMenu

   MENU oMenu

      MENUITEM "&Mantenimiento" ACTION Mantenimiento()

      MENUITEM "&Utilities"
      MENU
         MENUITEM "&Calculadora" ACTION WinExec( "Calc" ) ;
            MESSAGE "Lamando a la calculadora de Windows"

         SEPARATOR

         MENUITEM "&Escribir"    ACTION WinExec( "Write" ) ;
            MESSAGE "Llamando a Write de Windows"
      ENDMENU

      MENUITEM "&Salir"
      MENU
         MENUITEM "&Acerca de..." ;
            ACTION MsgAbout( oConnect:cAuthor, oConnect:cVersion ) ;
            MESSAGE "Informa sobre la versi贸n de Eagle1"
         SEPARATOR
         MENUITEM "&Salir";
            ACTION Salir();
            MESSAGE "Salir del ejemplo de Eagle1 y FWH"
      ENDMENU


   ENDMENU

return oMenu

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

static function AbrirTodo()
/*
    local cHost :=      "127.0.0.1           "
    local cUser :=      "root                "
    local cPassword :=  "root                "
    local cDbName :=    "E1Prueba            "
    local lRet, oDlg

    DEFINE DIALOG oDlg FROM 2, 2 TO 14, 35;
        TITLE "Datos de conexi贸n" ;
        STYLE nOr( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, 4 )

        @ 01, 01 SAY "Host:" OF oDlg
        @ 01, 05 GET cHost PICTURE "@K" UPDATE OF oDlg

        @ 1.8, 01 SAY "Usuario:" OF oDlg
        @ 02, 05 GET cUser PICTURE "@K" UPDATE OF oDlg

        @ 2.6, 01 SAY "Password:" OF oDlg
        @ 03, 05 GET cPassword PICTURE "@K" UPDATE OF oDlg

        @ 3.4, 01 SAY "Base datos:" OF oDlg
        @ 04, 05 GET cDbName PICTURE "@K" UPDATE OF oDlg

        @ 4, 7 BUTTON "&Acptar" ACTION oDlg:End() OF oDlg

    ACTIVATE DIALOG oDlg CENTERED

    cHost := trim( cHost )
    cUser := trim( cUser )
    cPassword := trim( cPassword )
    cDbName := trim( cDbName )

    // Creamos el objeto "connexion"
    oConnect := TMSConnect():New()

    // Nos conectamos al servidor
    lRet := oConnect:Connect( cHost, cUser, cPassword, cDbName )
*/

    local cDbName :=    "E1Prueba            "
    local cTabla := "Test"
    local lRet

// Con sistema empotrado:
#ifdef E1_EMBEDDED

    local aOptions := { "Prueba E1 con FWH", "--defaults-file=./test.cnf" }
    local aGroup := { "op_servidor", "op_cliente" }

    oConnect := TMSEConnect():New( )
    lRet := oConnect:Connect(  aOptions, aGroup, AllTrim( cDbName ) )

// Con sistema cliente/servidor:
#else

    local cHost :=      "127.0.0.1           "
    local cUser :=      "root                "
    local cPassword :=  "root                "
    local oDlg

    DEFINE DIALOG oDlg FROM 2, 2 TO 14, 35;
        TITLE "Datos de conexi贸n" ;
        STYLE nOr( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, 4 )

        @ 01, 01 SAY "Host:" OF oDlg
        @ 01, 05 GET cHost PICTURE "@K" UPDATE OF oDlg

        @ 1.8, 01 SAY "Usuario:" OF oDlg
        @ 02, 05 GET cUser PICTURE "@K" UPDATE OF oDlg

        @ 2.6, 01 SAY "Password:" OF oDlg
        @ 03, 05 GET cPassword PICTURE "@K" UPDATE OF oDlg

        @ 3.4, 01 SAY "Base datos:" OF oDlg
        @ 04, 05 GET cDbName PICTURE "@K" UPDATE OF oDlg

        @ 4, 7 BUTTON "&Acptar" ACTION oDlg:End() OF oDlg

    ACTIVATE DIALOG oDlg CENTERED

    cHost := trim( cHost )
    cUser := trim( cUser )
    cPassword := trim( cPassword )
    cDbName := trim( cDbName )

    // Creamos el objeto "connexion"
    oConnect := TMSConnect():New()

    // Nos conectamos al servidor
    lRet := oConnect:Connect( cHost, cUser, cPassword, cDbName )

#endif



    if !lRet
        MsgInfo( "No hay conexi贸n con el servidor", "Operaci贸n Cancelada" )
    else

//----------------------------------------------------------------------------//
// Aqui empieza E1RDD
//----------------------------------------------------------------------------//

        // Se inicia el sistema E1RDD
        InitE1RDD( oConnect )

        // A partir de aqu铆 como una DBF
        USE test NEW ALIAS test VIA "E1RDD"
        nWA := Select( "test" )

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

    endif

return( lRet )

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

static procedure Salir()

    if nWA > 0
        ( nWA )->( DbCloseArea() )
    endif

    if ValType( oConnect ) == "O"
        oConnect:Free()
    endif

    if ValType( oWnd ) == "O"
        oWnd:End()
    endif

return

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

static procedure Mantenimiento()

    local oDlg, oBrw, oCol

    DEFINE DIALOG oDlg FROM 3, 3 TO 40, 100 TITLE "Mantenimiento tabla TEST"

        @ 00, 01 SAY " &Datos tabla..."  OF oDlg

        oBrw := TXBrowse():New( oDlg )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || hb_ValToStr( ( nWA )->( FieldGet( 1 ) ) ) }
        oCol:cHeader   := ( nWA )->( FieldName( 1 ) )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || ( nWA )->( FieldGet( 2 ) ) }
        oCol:cHeader   := ( nWA )->( FieldName( 2 ) )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || ( nWA )->( FieldGet( 3 ) ) }
        oCol:cHeader   := ( nWA )->( FieldName( 3 ) )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || ( nWA )->( FieldGet( 4 ) ) }
        oCol:cHeader   := ( nWA )->( FieldName( 4 ) )
        oCol := oBrw:AddCol()
        oCol:bStrData  := { || ( nWA )->( FieldGet( 5 ) ) }
        oCol:cHeader   := ( nWA )->( FieldName( 5 ) )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || ( nWA )->( FieldGet( 6 ) ) }
        oCol:cHeader   := ( nWA )->( FieldName( 6 ) )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || ( nWA )->( FieldGet( 7 ) ) }
        oCol:cHeader   := ( nWA )->( FieldName( 7 ) )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || DToC( ( nWA )->( FieldGet( 8 ) ) ) }
        oCol:cHeader   := ( nWA )->( FieldName( 8 ) )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || hb_ValToStr( ( nWA )->( FieldGet( 9 ) ) ) }
        oCol:cHeader   := ( nWA )->( FieldName( 9 ) )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || hb_ValToStr( ( nWA )->( FieldGet( 10 ) ) ) }
        oCol:cHeader   := ( nWA )->( FieldName( 10 ) )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || hb_ValToStr( ( nWA )->( FieldGet( 11 ) ) ) }
        oCol:cHeader   := ( nWA )->( FieldName( 11 ) )

        oCol := oBrw:AddCol()
        oCol:bStrData  := { || ( nWA )->( FieldGet( 12 ) ) }
        oCol:cHeader   := ( nWA )->( FieldName( 12 ) )

        WITH OBJECT oBrw
            :nTop      := 10
            :nLeft     := 10
            :nBottom   := 240
            :nRight    := 370
            :nColDividerStyle := 2
            :bKeyNo    := { | n | iif( n == nil, ( nWA )->( RecNo() ), ( nWA )->( DbGoto( n ) ) ) }
            :bKeyCount := {|| ( nWA )->( RecCount() ) }
            :bSkip := { | n | GetTableObject( nWA ):Skipper( n ) }
            :SetRDD()
            :cAlias    := "Test"
            :CreateFromCode()
        END

        @ 14, 01 BUTTON "&A帽adir"       OF oDlg SIZE 35, 12;
                    ACTION CtrDatos( oBrw, .t. )
        @ 14, 08 BUTTON "&Modificar"    OF oDlg SIZE 35, 12;
                    ACTION CtrDatos( oBrw, .f. )
        @ 14, 15 BUTTON "&Borrar"       OF oDlg SIZE 35, 12;
                    ACTION Borrar( oBrw )
        @ 14, 22 BUTTON "&Ordenar"      OF oDlg SIZE 35, 12;
                    ACTION Ordernar( oBrw )
        @ 14, 29 BUTTON "B&uscar"       OF oDlg SIZE 35, 12;
                    ACTION Buscar( oBrw )
        @ 14, 36 BUTTON "Listar"        OF oDlg SIZE 35, 12;
                    ACTION ( oBrw:Report( "Listado de la tabla", .t. ), ( nWA )->( DbGoTop() ) )
        @ 14, 43 BUTTON "<<" OF oDlg ACTION oBrw:GoTop() SIZE 35, 12
        @ 14, 50 BUTTON ">>" OF oDlg ACTION oBrw:GoBottom() SIZE 35, 12
        @ 14, 57 BUTTON "&Salir"        OF oDlg ;
                    ACTION oDlg:End() SIZE 35, 12


   ACTIVATE DIALOG oDlg CENTERED

return

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

static procedure Borrar( oBrw )

    local nRecNo := ( nWA )->( RecNo() )

    if MsgYesNo( "Realmente quiere borrar el registro " + StrNum( ( nWA )->( RecNo() ) ) + "?" )
        ( nWA )->( DbDelete() )
        MyMsgInfo( "Borrado en el servidor" )
        ( nWA )->( DbGoTo( nRecNo ) )
        oBrw:Refresh()
    else
        MyMsgInfo( "No se ha borrado..." )
    endif

return

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

static procedure Ordernar( oLbxPrincipal )

    local oDlg, oLbx

    // As铆 se obtiene el objeto que maneja el WA, as铆 de fac铆l se puede trabajar
    // con clases y RDD
    local oDs := GetTableObject( nWA )

    local i := ( nWA )->( FCount() )
    local aFld := Array( i )
    local n, cValue

    FOR n := 1 TO i
        aFld[ n ] := ( nWA )->( FieldName( n ) )
    NEXT

    n := 0

    DEFINE DIALOG oDlg FROM 2, 2 TO 18, 30;
        TITLE "Eagle1, FW y ListBox" ;
        STYLE nOr( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, 4 )

    @ 1, 02 LISTBOX oLbx;
            VAR cValue;
            ITEMS aFld;
            SIZE 80, 70;
            OF oDlg

    @ 5, 02 BUTTON "&Seleccionar";
            OF oDlg;
            SIZE 40, 12;
            DEFAULT;
            ACTION ( MyMsgInfo( "Orden: " + Str( n := oLbx:GetPos() ) + ;
                                 + CRLF + "Nombre del campo: " + cValue, "Has elegido" ), ;
                     oDlg:End() )

    @ 5, 10 BUTTON "&Salir";
            OF oDlg;
            SIZE 40, 12;
            ACTION oDlg:End()

    ACTIVATE DIALOG oDlg CENTERED

    if n != 0 .and. oDS:SetOrderBy( n,, .t. )
        oLbxPrincipal:GoTop()
        oLbxPrincipal:Refresh()
    else
        MyMsgInfo( "No se ha establacido otro orden..." )
    endif

return

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

static procedure Buscar( oLb )

    local oDlg
    local i := ( nWA )->( FCount() )
    local n := 1
    local oSay, cSay := "&Valor campo "
    local oGet, uVal
    local oDs := GetTableObject( nWA )

    DEFINE DIALOG oDlg FROM 2, 2 TO 12, 70;
        TITLE "B煤squeda de valores en el DataSet" ;
        STYLE nOr( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, 4 )

        @ 01, 01 SAY "&Numero de columna ( 1 - " + StrNum( i ) + " ):" OF oDlg
        @ 01, 10 GET n PICTURE "999" ;
                 VALID ( uVal := ( nWA )->( FieldGet( n ) ), oGet:Refresh(), ;
                 oSay:SetText( cSay + ( nWA )->( FieldName( n ) ) ), n > 0 .and. n <= i ) ;
                 OF oDlg

        @ 02, 01 SAY oSay VAR cSay SIZE 50, 13  OF oDlg
        @ 02, 10 GET oGet VAR uVal SIZE 160, 13 OF oDlg


    @ 3, 02 BUTTON "&Buscar";
            OF oDlg;
            SIZE 40, 12;
            ACTION ( if( oDS:Find( n, uVal, .t. ), ;
                        MyMsgInfo( "Valor encontrado" ), ;
                        MyMsgInfo( "Valor no encontrado" ) ), oLb:Refresh() )

    @ 3, 10 BUTTON "S&iguiente";
            OF oDlg;
            SIZE 40, 12;
            ACTION ( if( !oDS:FindNext(), MyMsgInfo( "No hay m谩s. Se lleg贸 al final" ), ), ;
                     oLb:Refresh() )

    @ 3, 18 BUTTON "&Salir";
            OF oDlg;
            SIZE 40, 12;
            ACTION oDlg:End()

    ACTIVATE DIALOG oDlg

return

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

static procedure CtrDatos( oLb, lNuevo )

    local oDlg, cQueHago, nRec

    if lNuevo
        cQueHago := "Altas"
        ( nWA )->( DbAppend() )
    else
        cQueHago := "Modificaci贸n"
    endif

    nRec := ( nWA )->( RecNo() )

    DEFINE DIALOG oDlg FROM 2, 2 TO 30, 77;
        TITLE "Mantenimiento de la tabla Test - " + cQueHago;
        STYLE nOr( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, 4 )

        @ 01, 02 SAY "First"        OF oDlg
        @ 02, 1.5 GET ( nWA )->First    PICTURE "@K"                UPDATE OF oDlg

        @ 01, 26.6 SAY "Last"       OF oDlg
        @ 02, 20 GET ( nWA )->Last      PICTURE "@K"                UPDATE OF oDlg

        @ 2.8, 02 SAY "Street"      OF oDlg
        @ 4, 1.5 GET ( nWA )->Street    PICTURE "@K"                UPDATE OF oDlg

        @ 2.8, 26.6 SAY "City"      OF oDlg
        @ 4, 20 GET ( nWA )->City        PICTURE "@K"                UPDATE OF oDlg

        @ 4.6, 02 SAY "State"       OF oDlg
        @ 6, 1.5 GET ( nWA )->State     PICTURE "@K XX"             UPDATE OF oDlg

        @ 4.6, 5.5 SAY "Zip"        OF oDlg
        @ 6, 4 GET ( nWA )->Zip          PICTURE "@K 99999-9999"     UPDATE OF oDlg

        @ 4.6, 13.9 SAY "Hiredate"  OF oDlg
        @ 78, 83 DTPICKER ( nWA )->Hiredate   PIXEL SIZE 50, 11      UPDATE OF oDlg

        @ 5.7, 22 CHECKBOX ( nWA )->Married PROMPT "Married"        UPDATE OF oDlg

        @ 4.6, 33 SAY "Age"         OF oDlg
        @ 6, 24.5 GET ( nWA )->Age      PICTURE "@K 999"            UPDATE OF oDlg

        @ 4.6, 37.5 SAY "Salary"    OF oDlg
        @ 6, 28 GET ( nWA )->Salary     PICTURE "@KE 9,999,999.999" UPDATE OF oDlg

//..................... El campo MEMO...............................................
        @ 6.4, 02 SAY "Notes"       OF oDlg
        @ 8.1, 1.5 GET ( nWA )->Notes   MEMO SIZE 270, 65            UPDATE OF oDlg
//..................................................................................

        @ 10, 02 BUTTON "&Guardar";
                 OF oDlg;
                 SIZE 40, 12;
                 ACTION ( ( nWA )->( DbCommit() ), ( nWA )->( DBGoTo( nRec ) ), ;
                            oLb:Refresh(), oDlg:End() )

        @ 10, 18 BUTTON "&Salir";
                 OF oDlg;
                 SIZE 40, 12;
                 ACTION oDlg:End()

    ACTIVATE DIALOG oDlg

return

//----------------------------------------------------------------------------//
______________________________________________________________________________

Sevilla - Andaluc铆a
Posts: 492
Joined: Wed Nov 16, 2005 12:03 PM
Re: Clase TTABLE insertar Registros en Tablas SQL Lexico XBASE
Posted: Thu Nov 15, 2018 02:47 AM

Manuel
Gracias,
En mi caso, utilizo tablas enlazadas con inner, vistas, subconsultas, en una consulta , desconozco si podr茅 utilizarlo con la sintaxis que publicase.

Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Clase TTABLE insertar Registros en Tablas SQL Lexico XBASE
Posted: Fri Nov 23, 2018 03:17 PM
jnavas wrote:Manuel
Gracias,
En mi caso, utilizo tablas enlazadas con inner, vistas, subconsultas, en una consulta , desconozco si podr茅 utilizarlo con la sintaxis que publicase.


Saludos Sr Juan,

Gracias por sus ejemplos.

Su clase tiene algun metodo para la lectura de tablas mediante SELECT ?

De ser asi, algun ejemplo ?

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 492
Joined: Wed Nov 16, 2005 12:03 PM
Re: Clase TTABLE insertar Registros en Tablas SQL Lexico XBASE
Posted: Sun Nov 25, 2018 01:44 PM

Saludos
Gracias por la pregunta,
Para la lectura de datos, realice una clase llamada TTABLE clonada desde la clase tdbodbcd, utilizando un arreglo reemplazando el uso de tablas DBF, tambien la utilizo de manera general para MySQL , SQL SERVER sin tener que realizar ningun cambio,
Si necesitas puedo crear un ejemplo para uso con FW,