Tdolphin Ejemplo ABM.

José Ríos
Posts: 119
Joined: Fri Nov 04, 2005 12:23 am

Tdolphin Ejemplo ABM.

Post by José Ríos »

Buen dia.

Creo que seria de utilidad para todos los que estamos empezando con tdolphin si pusieramos ejemplos de programas echos con esta clase para retroalimentarnos y poder usar la clase en toda su funcionalidad. Aqui les dejo un primer ejemplo de altas bajas y modificaciones, no se si sea optimo espero sus comentarios para la mejora de dicho programa.

Code: Select all | Expand

function Main()   local oWnd:=WndMain(),oBar, oPopup, oBtn   local WcDirectorioPrograma:=allTrim(CurDir())   local WcAux,WaStruct   local W_cDirTrabajo,WnSec1,WcClaveAcceso:=space(10)   local oServer,cQuery   private oFontArial9,oFontArial8   public WaStructFacuras:={}   DEFINE FONT oFontArial9  NAME "Arial" SIZE 0, -9   DEFINE FONT oFontArial8  NAME "Arial" SIZE 0, -8   set deleted ON    set talk OFF    set exact ON    set confirm ON    set century On    set date FRENCH       if date()<cToD('15/09/2010')      msgStop('La fecha del sistema es incorrecta')      release all      resAllFree()      memory(-1)      PostQuitMessage(0)      __Quit()      quit   endIf    CONNECT EMBEDDED oServer ;          DATABASE "AdmiPos" ;          OPTIONS "Dolphin_server_embedded",;                  "--datadir=./datos/",;                  "--language=./sysdir/spanish/",;                  "--skip-innodb",;                  "--key-buffer-size=64MB",;                  "--console";          GROUPS "Dolphin_server_embedded",    //    //Table Structure (like dbf)   //Name, Type, Length, Decimal, Not Null (logical), Defaul value    WaStruct={{"ini_Empresa","C",100,0,.t.,},;                 {"ini_pathconection","C",100,0,.t.,},;             {"DirCDFS","C",40,0,.t.,};             }    //CreateTable( cTable, aStruct, cPrimaryKey, cUniqueKey, cAuto, cExtra, lIfNotExist, lVer )    if .not. oServer:TableExist( 'Inicia' )      oServer:CreateTable( "inicia", WaStruct, , , ,"ENGINE = InnoDB",.t. )      DEFINE QUERY oQry "SELECT * FROM inicia"      oQry:GetBlankRow( .F. )      oQry:ini_empresa:='InterWin'           oQry:save()    endIf    WaStruct={{"ven_id","N",10,0,.t.,},;                 {"ven_nombre","C",100,0,.t.,},;             {"ven_comi","N",5,2,.t.,},;             {"ven_usuario","C",100,0,.t.,},;             {"ven_fecha","D",10,0,.t.,},;             {"ven_hora","D",10,0,.t.,};             }   if .not. oServer:TableExist( 'vendedores' )      oServer:CreateTable( "vendedores", WaStruct,"ven_id" , ,"ven_id" ,"ENGINE = InnoDB",.t. )   endIf   SetBalloon( .T. ) // Balloon shape required for tooltips   DEFINE WINDOW oWnd TITLE "SISTEMA DE AMINISTRACION Y FACTURACION ELECTRONICA "+space(5);       MENU BuildMenu(WcDirectorioPrograma,oWnd,oServer)   ACTIVATE WINDOW oWnd MAXIMIZED;      VALID MsgYesNo( "¿Desea salir?" )   oFontArial9:end()   release all   resallfree()   memory(-1)   PostQuitMessage(0)   __Quit()   quitreturn nilfunction BuildMenu(cDirectorioPrograma,oWnd,oServer)   local WcDirTrabajo:=''   local oMenu   MENU oMenu 2007      MENUITEM "Catalogos"      MENU         MENUITEM "Vendedores"  action BuscaVendedores(cDirectorioPrograma,'Vendedores',oServer)      ENDMENU   ENDMENUreturn oMenufunction DefineColoresGet(oGet)      oGet:bGotFocus:={|| oGet:SetColor(nRgb(15,15,15),nRgb(208,218,242))}   oGet:bLostFocus:={|| oGet:SetColor(nRgb(15,15,15),nRgb(255,255,255))}return NILFunction BuscaVendedores(cDirectorioPrograma,cEnvia,oServer)   local oDlg, oBrw, oCol,oSayCadenaBusqueda,oQry   local i,WcCadenaBusqueda:='',WcCodigoElegido:=0   DEFINE DIALOG oDlg RESOURCE "General_busca" title 'Edicion de Contenido'   oServer:SetNameServer( "Central" )   DEFINE QUERY oQry "SELECT * FROM Vendedores order by ven_id" OF "Central"   oBrw := TXBrowse():New( oDlg)   oBrw:nMarqueeStyle       := MARQSTYLE_HIGHLROW   oBrw:nColDividerStyle    := LINESTYLE_BLACK   oBrw:nRowDividerStyle    := LINESTYLE_BLACK   oBrw:lColDividerComplete := .t.     oBrw:bClrStd := { || If( ( oBrw:KeyNo() % 2 ) == 0, { CLR_BLACK, RGB( 224, 236, 255 ) }, { CLR_BLACK, RGB( 189, 211, 253 ) } ) }   oCol := oBrw:AddCol()   oCol:bStrData  := { ||str(oQry:ven_id,3)}   oCol:cHeader   := "file"   oCol:nWidth        := 82   oCol := oBrw:AddCol()   oCol:bStrData  := { ||AllTrim( oQry:ven_nombre)}   oCol:cHeader   := "file name"   oCol:nWidth        := 82   for i=1 to len(oBrw:aCols)       oBrw:aCols[ i ]:blDClickData  := {|r,c,f,o| dVendedores("EDITA",cDirectorioPrograma,oQry),oBrw:GoTop(),oBrw:refresh()}    next   oBrw:CreateFromResource( 101 )   oBrw:setdolphin(oQry, .F.)    ACTIVATE DIALOG oDlg CENTERED ON INIT (BuildBarDlgVendedores( oDlg,cDirectorioPrograma,oBrw,cEnvia,oQry ),;            oBrw:SetFocus())return WcCodigoElegido//----------------------------------------------------------------------------//function BuildbarDlgVendedores( oDlg,cDirectorioPrograma,oBrw,cEnvia,oQry )   local oBar,oBtnNuevo,oBtnEditar,oBtnImprimir,oBtnAExcel,oBtnInicio,oBtnFin,oBtnExit   DEFINE BUTTONBAR oBar OF oDlg  SIZE 45, 45 2007   DEFINE BUTTON oBtnNuevo OF oBar file cDirectorioPrograma+"\Nuevo.BMP" ;      ACTION (EdVendedores("ALTA",cDirectorioPrograma,oQry),oBrw:GoTop(),oBrw:refresh() ) PROMPT "Nuevo"   DEFINE BUTTON oBtnEditar OF oBar file cDirectorioPrograma+"\Editar.BMP" ;      ACTION (EdVendedores("EDITA",cDirectorioPrograma,oQry),oBrw:GoTop(),oBrw:refresh()) PROMPT "Editar";   DEFINE BUTTON oBtnImprimir OF oBar file cDirectorioPrograma+"\Imprimir.BMP" ;      ACTION (ReporteVendedores(oQry),oBrw:GoTop(),oBrw:refresh() ) PROMPT "Imprimir" GROUP;   DEFINE BUTTON oBtnInicio OF oBar file cDirectorioPrograma+"\Inicio.BMP" ;      ACTION oBrw:goTop() PROMPT "Inicio" GROUP   DEFINE BUTTON oBtnFin OF oBar file cDirectorioPrograma+"\fin.BMP" ;      ACTION oBrw:goBottom() PROMPT "Fin"   DEFINE BUTTON oBtnExit OF oBar file cDirectorioPrograma+"\exit.BMP" ;      ACTION oDlg:End() PROMPT "Salir" group   oBrw:refresh(.t.)return nilfunction EdVendedores(cStatus,cDirectorioPrograma,oQry)   local oDbf,oBtnOK,oBtnCancela,oBtnBorra   local oDlg,oFld,oBrW   local oGets[40],oEspecial,oTipoProd,oImptosEspe,oIVAExto   local WcAliasAnterior:=alias(),i   if cStatus='ALTA'      oQry:GetBlankRow( .F. )   endIf   DEFINE DIALOG oDlg RESOURCE "General_Catalogo"    REDEFINE FOLDER oFld ID 110 OF oDlg;    PROMPTS  "Generales";    DIALOGS  "Vendedores_Grales"   REDEFINE GET oGets[1] var oQry:ven_id ;        ID 100 OF oFld:aDialogs[1] ;      PICTURE '999';        UPDATE   REDEFINE GET oGets[2] var oQry:ven_nombre ;        ID 101 OF oFld:aDialogs[1];        UPDATE   REDEFINE GET oGets[3] var oQry:ven_comi ;        ID 102 OF oFld:aDialogs[1] ;      PICTURE '99.99';        UPDATE   for i=1 to 3      DefineColoresGet(oGets[i])   next   REDEFINE BUTTONBMP oBtnOK ID 51 OF oDlg;        BITMAP cDirectorioPrograma+"\ok.BMP" ;        PROMPT "Aceptar" TEXTRIGHT;        ACTION if(ValidaGrabaVendedores(cStatus,oQry),;                 if(cStatus='EDITA',oDlg:End(),(oQry:GetBlankRow( .F. ),oFld:update())),NIL);        TOOLTIP "Acepta Seleccion"   REDEFINE BUTTONBMP oBtnCancela ID 52 OF oDlg;        BITMAP cDirectorioPrograma+"\Cancelar.BMP" TEXTRIGHT;       PROMPT "Cancelar" ;        ACTION (if(cStatus<>'EDITA',oQry:lAppend:=.f.,NIL),oQry:Refresh(),oDlg:End());        TOOLTIP "Cancela edicion Seleccion" ;   REDEFINE BUTTONBMP oBtnBorra ID 53 OF oDlg;        BITMAP cDirectorioPrograma+"\Borrar.BMP" TEXTRIGHT;       PROMPT "Borrar" ;      WHEN cStatus<>'ALTA';        ACTION (BorraVendedores(oQry),oDlg:End());        TOOLTIP "Cancela edicion Seleccion" ;   ACTIVATE DIALOG oDlg;            CENTERED   oGets:=NILreturn NILfunction ValidaGrabaVendedores(cStatus,oQry)   if cStatus='ALTA'      if oQry:ven_id=0         msgStop('Debe de capturar numero')         return .f.      endIf   endIf   oQry:save()   if cStatus='ALTA'      oQry := oQry      msgInfo('Alta Efectuada')   endIfreturn .t.function BorraVendedores(oQry)   if .not. MsgNoYes('¿Desea borrar el registro?')      return NIL   endIf   oQry:Delete()   oQry:refresh()return NILfunction ReporteVendedores(oQry)   local oReport   local WcTitulo1:='Prueba',WcTitulo2:='Listado de vendedores al '+dToC(date())    oQry:goTop()    REPORT oReport ;         TITLE allTrim(WcTitulo2) CENTER;         HEADER allTrim(WcTitulo1) CENTER;         FOOTER OemtoAnsi("P gina: ")+str(oReport:nPage,3) right;         preview      COLUMN TITLE 'Numero' ;      DATA oQry:ven_id      COLUMN TITLE 'Nombre';      DATA oQry:ven_nombre;      COLUMN TITLE '%  Comi' ;      DATA oQry:ven_comi;      PICTURE '99.99'   End Report   IF oReport:lCreated      oReport:bSkip := {|| oQry:skip()}   ENDIF   ACTIVATE REPORT oReportreturn NIL 


En este ejemplo lo que no funciona es la rutina para imprimir el reporte, me lo muestra en blanco, si alguien me puede dar algun tip de como generar el reporte se lo agradeceria.

Saludos
Last edited by José Ríos on Thu Jan 05, 2012 5:25 am, edited 1 time in total.
José Ríos
Posts: 119
Joined: Fri Nov 04, 2005 12:23 am

Re: Tdolphin Ejemplo ABM.

Post by José Ríos »

Corregido, con las siguientes modificaciones ya funciona el reporte:


Code: Select all | Expand

function ReporteVendedores(oQry)   local oReport   local WcTitulo1:='Prueba',WcTitulo2:='Listado de vendedores al '+dToC(date())   local WnLinea:=1,WnHasta:=0    WnHasta:=oQry:lastRec()    oQry:goTop()    REPORT oReport ;         TITLE allTrim(WcTitulo2) CENTER;         HEADER allTrim(WcTitulo1) CENTER;         FOOTER OemtoAnsi("P gina: ")+str(oReport:nPage,3) right;         preview      COLUMN TITLE 'Numero' ;      DATA oQry:ven_id      COLUMN TITLE 'Nombre';      DATA oQry:ven_nombre;      COLUMN TITLE '%  Comi' ;      DATA oQry:ven_comi;      PICTURE '99.99'   End Report   IF oReport:lCreated      oReport:bSkip := {||WnLinea++,oQry:skip()}   ENDIF    ACTIVATE REPORT oReport WHILE WnLinea <= WnHastareturn NIL 


Saludos
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Tdolphin Ejemplo ABM.

Post by Daniel Garcia-Gil »

Jose

Muchas Gracias!!! :-D
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
José Ríos
Posts: 119
Joined: Fri Nov 04, 2005 12:23 am

Re: Tdolphin Ejemplo ABM.

Post by José Ríos »

Daniel

Gracias a ti por por poner a disposicion del foro la magnifica clase tdolphin.

Tengo algunas preguntas

* sobre la primary key: ¿se puede definir una primary key con dos campos (o columnas) en tdolphin?.

* como puedo cambiar el order by de un query sin volver a hacer un select?

Saludos
User avatar
Compuin
Posts: 1252
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada
Has thanked: 8 times
Been thanked: 3 times

Re: Tdolphin Ejemplo ABM.

Post by Compuin »

Amigos,

En SQL no es buena practica el uso del SELECT *. Lo mejor es que hagan la consulta referenciando el o los campos que van a consultar.

Saludos
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
User avatar
wmormar
Posts: 1075
Joined: Fri Oct 07, 2005 10:41 pm
Location: México
Contact:

Re: Tdolphin Ejemplo ABM.

Post by wmormar »

José Ríos,

Se puede perfectamente colocar mas de una columna (campo) como primary key
Y para el cambio de orden es necesario hacer una consulta nueva, salvo Daniel haga una funcion para que le enviemos el cambio de ORDER BY, pero internamente, se haria una consulta nueva.

saludos

José Ríos wrote:Daniel

Gracias a ti por por poner a disposicion del foro la magnifica clase tdolphin.

Tengo algunas preguntas

* sobre la primary key: ¿se puede definir una primary key con dos campos (o columnas) en tdolphin?.

* como puedo cambiar el order by de un query sin volver a hacer un select?

Saludos
William, Morales
Saludos

méxico.sureste
carloslmm
Posts: 71
Joined: Sat Oct 20, 2007 3:02 pm
Location: Sinaloa Mexico

Re: Tdolphin Ejemplo ABM.

Post by carloslmm »

Gracias a todos Maestros

estoy cambiando la base de datos y esta me parece un muy buena opcion, creo que esto y la ayuda de un gran amigo
william voy a salir adelante mas rapido


gracias de nuevo

carlos de la rosa perez

carloslmm@hotmail.com
José Ríos
Posts: 119
Joined: Fri Nov 04, 2005 12:23 am

Re: Tdolphin Ejemplo ABM.

Post by José Ríos »

William.

Gracias por responder.

¿Cual es la sintaxis para crear una primary key con mas de una columna?, lo intente de la siguiente forma:

oServer:CreateTable( "facturas", WaStructFacuras,"serie,numero" , , ,"ENGINE = InnoDB",.t. )

Pero al crearse la tabla me manda el siguiente error:

Application
===========
Path and name: C:\FWH1109\sistemas\AdmiPos\admipos.exe (32 bits)
Size: 2,232,832 bytes
Time from start: 0 hours 0 mins 0 secs
Error occurred at: 06/01/2012, 09:42:39
Error description: Error TDOLPHIN/9003 Internal Error:Invalid Primary Key
Args:

Stack Calls
===========
Called from: .\source\prg\tdolpsrv.prg => DOLPHIN_DEFERROR(2668)
Called from: .\source\prg\tdolpsrv.prg => TDOLPHINSRV:CHECKERROR(776)
Called from: .\source\prg\tdolpsrv.prg => TDOLPHINSRV:CREATETABLE(947)
Called from: ProcGral.prg => CREAARCHIVOS(629)
Called from: AdmiPos.prg => MAIN(66)
User avatar
wmormar
Posts: 1075
Joined: Fri Oct 07, 2005 10:41 pm
Location: México
Contact:

Re: Tdolphin Ejemplo ABM.

Post by wmormar »

José Ríos,

Se tendria que modificar la clase para que hiciera lo que comentas, hasta ahora solo está diseñada para una columna.

saludos
William, Morales
Saludos

méxico.sureste
User avatar
joseluisysturiz
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Re: Tdolphin Ejemplo ABM.

Post by joseluisysturiz »

José Ríos wrote:Daniel

Gracias a ti por por poner a disposicion del foro la magnifica clase tdolphin.

Tengo algunas preguntas

* sobre la primary key: ¿se puede definir una primary key con dos campos (o columnas) en tdolphin?.

* como puedo cambiar el order by de un query sin volver a hacer un select?

Saludos


Probastes..?

oQry:SetOrder( "adj_insc ASC", .t. )

lo uso al igual que setwhere()
Dios no está muerto...

Gracias a mi Dios ante todo!
evallejo
Posts: 13
Joined: Thu Feb 07, 2008 10:09 pm

Re: Tdolphin Ejemplo ABM.

Post by evallejo »

daniel

cuando uso
:lappend=.t.
:save()

el puntero se queda en el anterior, como si faltara un dbappend(). inserta el registro pero el puntero se queda en el anterior. o sea el ultimo registro es 10, adiciono, se inserta el registro 11 pero el puntero sigue en el 10, una manito plis

Eduardo
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Tdolphin Ejemplo ABM.

Post by Daniel Garcia-Gil »

prueba

Code: Select all | Expand

:lappend=.t.:save():skip()
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
evallejo
Posts: 13
Joined: Thu Feb 07, 2008 10:09 pm

Re: Tdolphin Ejemplo ABM.

Post by evallejo »

gracias Daniel, solo por curiosidad, en red esto dara problemas? ya que dos o mas usuarios estan usando esta tabla

att
Eduardo
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Tdolphin Ejemplo ABM.

Post by Daniel Garcia-Gil »

evallejo wrote:gracias Daniel, solo por curiosidad, en red esto dara problemas? ya que dos o mas usuarios estan usando esta tabla

att
Eduardo

no
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
José Ríos
Posts: 119
Joined: Fri Nov 04, 2005 12:23 am

problemas al usar seek con datos numericos

Post by José Ríos »

Buen dia.

Siguiendo con muis pruebas en tdophin me encontre con un caso en que el metodo seek con datos numericos no encuentra numeros de mas de un digito.

Por ejemplo si tengo dados de alta los registros:

Numero Nombre
1 A
3 B
11 C

Y hago el siguiente query y despues 3 busquedas seek cobre el query

Code: Select all | Expand

                DEFINE QUERY oQry "SELECT * FROM vendedores order by numero"                // y despues despues hago la siguientes busquedas:                                If oQry:seek(2, 'Numero' ) > 0                     msginfo('encontrado')                else                      msginfo('no encontrado')                endif                If oQry:seek(1, 'Numero' ) > 0                     msginfo('encontrado')                else                      msginfo('no encontrado')                endif                 If oQry:seek(11, 'Numero' ) > 0                     msginfo('encontrado')                else                      msginfo('no encontrado')                endif 

En los dos primeros casos (numero =1 y numero=2 ), el resultado de la busqueda es exitoso, pero cuando numero=11 el registro no es encontrado.

Haciendo pruebas con find el resultado de la busqueda para numero=11 es correcto.

¿Esto significa que seek no debe usarse con campos numericos?.

Saludos.

Jose Rios.
Post Reply