OT: XBrowse-MySql-TMysql

OT: XBrowse-MySql-TMysql

Postby FranciscoA » Mon Mar 12, 2012 9:23 pm

Hola amigos, tengo este codigo que me ha funcionado perfectamnte desde hace muuuuuuuuuuuchos años en un sistema de contabilidad que desarrollé y que he venido mejorando a traves de lenguajes xbase hasta llegar a FiveWin - xHarbour.

Hoy quiero plasmarlo en MySql Server y TMysql, y para terminarlo necesito que me ayuden a terminar de "traducir" de FiveWin a MySql, este pequeño codigo. Si a alguien le es útil, pués aquí está, y si lo mejora sería interesante que lo subiera al foro.

Es un codigo que utilizo para INSERTAR (NO AGREGAR) datos en una pequeña dbf en la cual necesito insertar datos entre los datos.

Quiero agradecer a Willy y William que me han apoyado en mis inicios hacia MySql, ya que sin su ayuda creo que no hubiera "arrancado".

Code: Select all  Expand view
ESTE ES EL CODIGO EN FIVEWIN
//-------------------------------------
Function InsGopMult(oLbx)
local cAlias:=(oLbx:cAlias)
LOCAL nLin := (cAlias)->Lin

DbSelectArea(cAlias)
   (cAlias)->(dbAPPEND())
   (cAlias)->lin := nLin

   //Reconstruir las lineas y para q'se coloque en el registro agregado
   nLin+=1
   ReconstLin(nLin,cAlias)
   oLbx:Refresh()
return nil

//--------------------------
FUNCTION ReconstLin(nLinea,cAlias)
local nLin

cFicTemp:="GPMDEF"
CreaFich(@cFicTemp)  //Function para crear fichero temporal

     (cAlias)->( __dbCopy( (cFicTemp), { },,,,, .F., ) )
     DBUSEAREA(.T.,,(cFicTemp),(cFicTemp),.F.)
     (cFicTemp)->(dbgotop())
     nLin:=1
     while (cFicTemp)->(!eof())
       (cFicTemp)->lin :=nLin
       (cFicTemp)->(dbskip())
       nLin+=1
     enddo
     (cFicTemp)->(dbcloseArea())

     DBSELECTAREA(cAlias)
     (cAlias)->(__dbzap())
     __dbapp((cFicTemp),{},,,,,.f.,)
      ferase(cPathDef+"\"+(cFicTemp)+".dbf")
      (cAlias)->(dbSeek(nLinea))

  SysRefresh()
Return nil



/ESTE ES EL CODIGO EN MYSQL
//--------------------------// Inserta linea
Function InsGopMult(oLbx,oQuery)   //ESTA PARTE ESTA BIEN
LOCAL nLin := oQuery:lin

  oServer:Query("
INSERT INTO gopmult (lin) VALUES ('"+cValToChar(nLin)+"')")

  oQuery:Refresh()
  oLbx:Refresh()

  //Reconstruir las lineas y para q'se coloque en el registro insertado
  nLin+=1
  ReconstLin(nLin,oQuery)

  oQuery:Refresh()
  oLbx:Refresh()

return nil

//ESTA ES LA QUE DA PROBLEMAS. Aunque la function funciona, los datos devueltos a  GopMult son desordenados.
//--------------------------//Reconstruir lineas
FUNCTION ReconstLin(nLinea,oQuery)    
local nLin,oTempo,nLinAnter

  oServer:Query("
CREATE TABLE goptempo SELECT * FROM gopmult")  //gopmult es la tabla principal en este caso

  oTempo:=oServer:Query("
SELECT * FROM goptempo")
  oTempo:GoTop()

  nLin:=1
  While !oTempo:Eof()    
    nLinAnter := oTempo:lin
    oServer:Query("
UPDATE goptempo SET lin = '"+cValToChar(nLin)+"' WHERE lin = '"+cValToChar(nLinAnter)+"' LIMIT 1")
    oTempo:Skip()
    nLin+=1
  Enddo

  oServer:Query("
DELETE FROM gopmult")
  oServer:Query("
OPTIMIZE TABLE gopmult")
  oServer:Query("
INSERT INTO gopmult SELECT * FROM goptempo")

  oServer:Query("
DROP TABLE IF EXISTS goptempo")
  oQuery:Refresh()

  oQuery:GoTop()
  oQuery:Locate("
lin",nLinea)
  SysRefresh()

Return nil


Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: OT: XBrowse-MySql-TMysql

Postby Willi Quintana » Tue Mar 13, 2012 2:37 am

Hola, si entendi que la idea es insertar un registro en browse ordenado y que luego el cursor se reubique en el registro nuevo, pues seria algo asi:
Code: Select all  Expand view


//--------------------------// Insertar un dato
Function InsGopMult(oLbx,oQuery)  
LOCAL nLin := oQuery:lin

  oServer:Query("INSERT INTO gopmult (lin) VALUES ('"+cValToChar(nLin)+"')")
  oQuery:Refresh()                   // esto "recarga" la data de la tabla al cursor oQuery
  MySetBrowse( oLbx, oQuery )   // no se si esto es necesario,,, prueba....
  oQuery:Seek(nLin, "lin")         // aqui se ubica el dato nLin en el campo <lin>
  oLbx:Refresh()                      // recargas el browse y listo

Return nil




 
User avatar
Willi Quintana
 
Posts: 1002
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: OT: XBrowse-MySql-TMysql

Postby FranciscoA » Tue Mar 13, 2012 1:22 pm

Willi, antes que nada, agradezco sinceramente tu apoyo. Te digo que ya tengo en un 80-90% avanzado mi sistema de contabilidad en FW-xH-MySql-TMysql.

Referente al caso expuesto anteriormente, ya se me hacía raro que en el Mysql.prg que tengo no aparezca el METHOD Seek, sin embargo compilé conforme a tu ejemplo y no me dió error, aunque el resultado es el mismo. La librería de TMysql que uso me la cedió William Morales, pero no tengo información sobre sus datas y métodos.

Creo que me faltó exponer más información sobre este código, (que utilizo para insertar datos dentro de los datos de una dbf, en cualquier posición) por lo que te presento un ejemplo más completo.

//CREO LA TABLA PRINCIPAL (puede contener un máximo de 120 registros o lineas)
oServer:Query("CREATE TABLE IF NOT EXISTS gopmult(" +;
"LIN INT(3) NOT NULL DEFAULT 0 COMMENT 'control lineas'," +;
"NOMBRE1 VARCHAR(50) NULL DEFAULT '' COMMENT 'cuenta'," +;
"INDEX gopmult (LIN) )"+; //No uso primary Key porque necesito num de lineas (lin) duplicados en su momento.
"ENGINE = InnoDB ;")


//ABRO LA CONSULTA EN XBROWSE
oQuery:=oServer:Query("SELECT * FROM gopmult")

oLbx := TXBrowse():New( oDlg )
oLbx:SetMySql(oQuery,.f.)

oLbx:nMarqueeStyle := MARQSTYLE_HIGHLCELL ...etc,etc

oCol = oLbx:AddCol()
oCol:bEditValue = { || oQuery:lin }
oCol:cEditPicture = "@Z 999"
oCol:cHeader = "Lin"
..., ..., ....
REDEFINE BUTTONBMP obt1 PROMPT "&Ins Linea " ID 101 OF oDlg BITMAP "NUEVO" TEXTRIGHT ACTION InsGopMult(oLbx,oQuery)

etc,etc......


//--------------------------// Inserta linea
Function InsGopMult(oLbx,oQuery)
LOCAL nLin := oQuery:lin

oServer:Query("INSERT INTO gopmult (lin) VALUES ('"+cValToChar(nLin)+"')")

if oServer:lError
MsgInfo(oServer:Error)
endif

oQuery:Refresh()
oLbx:Refresh()

//Cuando se insertan reg se duplica el no. de lin para que el indice lo coloque en su posicion numerica. Luego esto es
//corregido o reconstruido en ReconstLin() que vuelve a renumerar las lineas. De esta manera el item se inserta en una //posicion cualquiera dentro de los demas registros de la tabla.

//Reconstruir las lineas y para q'se coloque en el registro insertado
nLin+=1
ReconstLin(nLin,oQuery)

oQuery:Refresh()
oLbx:Refresh()
return nil

//--------------------------//Reconstruir lineas
FUNCTION ReconstLin(nLinea,oQuery)
local nLin,oTempo,nLinAnter

oServer:Query("CREATE TABLE goptempo SELECT * FROM gopmult")

oTempo:=oServer:Query("SELECT * FROM goptempo")
oTempo:GoTop()

//Aqui lo que hace es re-numerar las lineas del 1 hasta el ultimo.
nLin:=1
While !oTempo:Eof()
nLinAnter := oTempo:lin
oServer:Query("UPDATE goptempo SET lin = '"+cValToChar(nLin)+"' WHERE lin = '"+cValToChar(nLinAnter)+"' LIMIT 1")
oTempo:Skip()
nLin+=1
Enddo

oServer:Query("DELETE FROM gopmult") //borramos todos los reg en tabla principal (esta tabla tiene un index no PK)
oServer:Query("INSERT INTO gopmult SELECT * FROM goptempo") // y los agregamos desde tabla de uso temporal
oServer:Query("OPTIMIZE TABLE gopmult") //optimizamos la tabla principal, no sé si es necesario en este momento

oServer:Query("DROP TABLE IF EXISTS goptempo") //borramos la tabla copia de la tabla principal

oQuery:Refresh()

oQuery:GoTop()
//oQuery:Locate("lin",nLinea)
oQuery:Seek(nLinea,"lin") //incluida tu sugerencia (aqui se coloca en el registro deseado)
SysRefresh()
Return nil

El problema es que los registros que antes estaban ordenados en la tabla principal, al vaciarla y agregarlos desde la copia que creamos para reconstruir las lineas, los registros no se muestran ordenados por lin. Parece que en el proceso la tabla principal corrompe su indice (INDEX (LIN), o es que el estoy equivocado con el uso de indices NO PRIMARY KEY.

Saludos
Last edited by FranciscoA on Tue Mar 13, 2012 1:49 pm, edited 1 time in total.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: OT: XBrowse-MySql-TMysql

Postby wmormar » Tue Mar 13, 2012 1:38 pm

Siguiendo el codigo de Willi Quintana,

Al abrir el query para el listbox
//ABRO LA CONSULTA EN XBROWSE
oQuery:=oServer:Query("SELECT * FROM gopmult ORDER BY lin")

Despues con un simple refresh sin problemas.

Saludos

Willi Quintana wrote:Hola, si entendi que la idea es insertar un registro en browse ordenado y que luego el cursor se reubique en el registro nuevo, pues seria algo asi:
Code: Select all  Expand view


//--------------------------// Insertar un dato
Function InsGopMult(oLbx,oQuery)  
LOCAL nLin := oQuery:lin

  oServer:Query("INSERT INTO gopmult (lin) VALUES ('"+cValToChar(nLin)+"')")
  oQuery:Refresh()                   // esto "recarga" la data de la tabla al cursor oQuery
  MySetBrowse( oLbx, oQuery )   // no se si esto es necesario,,, prueba....
  oQuery:Seek(nLin, "lin")         // aqui se ubica el dato nLin en el campo <lin>
  oLbx:Refresh()                      // recargas el browse y listo

Return nil




 
William, Morales
Saludos

méxico.sureste
User avatar
wmormar
 
Posts: 1073
Joined: Fri Oct 07, 2005 10:41 pm
Location: México

Re: OT: XBrowse-MySql-TMysql

Postby FranciscoA » Tue Mar 13, 2012 2:13 pm

Hola William, gracias por responder.
Lo que necesito hacer (en dbf's-FWXH trabaja perfectamente), es lo siguiente.

Supongamos estos items en estos campos en el oBrw:
Esta tabla que es la principal (GopMult), tiene un indice que no es PRIMARY KEY sino solamente INDEX (LIN)
LIN NOMBRE
1 A
2 B
3 C
4 D
5 E

Quiero insertar entre lin 2 y lin 3, un registro.
Lo que hace la function InsGopMult(oLbx,oQuery), es agregar un nuevo registro con el numero 2, es decir momentaneamente existen dos registros en el campo LIN con el numero 2.
1 A
2 B
2
3 C
4 D
5 E

Luego, la funtion ReconstLin(nLinea,oQuery), hace una copia temporal (sin indice) de la tabla principal, y luego recorre todos sus registros numerandolos del 1 hasta el fin. Seguidamente limpia la tabla principal y hace un INSERT en esta desde la tabla copia, agregando todos sus registros.

Recordemos que la tabla principal tiene un indice no PK, y al mostrar el brw con los datos recien agregados, estos no se muestran ordenados por lin (¿que pasa con el indice? Hago un mal uso de él?, Si lo hago PRIMARY KEY no me permitiría claves duplicadas.
6 //El orden "por las cuajadas" como decimos aqui.
1 A
4 B
3 A
2 B
5 D

Lo que quiero decir es que el recien reg agregado se convierte en 3 y ser el registro seleccionado.
En este momento voy a probar recreando el indice de la tabla principal, ya que no estoy seguro si OPTIMIZE TABLE lo hace.
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: OT: XBrowse-MySql-TMysql

Postby Willi Quintana » Tue Mar 13, 2012 3:00 pm

Hola,,, en vez de ::Seek, podria hacerse una busqueda secuencial,,,,
User avatar
Willi Quintana
 
Posts: 1002
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: OT: XBrowse-MySql-TMysql

Postby Willi Quintana » Tue Mar 13, 2012 3:17 pm

Francisco Hola,,, en vez de ::Seek, podria hacerse una busqueda secuencial,,,,recuerda que no los index sean primarios o secundarios, se usan para hacer los SELECT, asi que me parece que deberias usar la potencia de las consultas para conseguir lo que deseas y sin usar tablas temporales,,, comunicate conmigo,.. svite@hotmail.com
User avatar
Willi Quintana
 
Posts: 1002
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: OT: XBrowse-MySql-TMysql

Postby FranciscoA » Tue Mar 13, 2012 3:31 pm

Willi.
El código se refiere a un módulo para que el cliente tenga opción a configurar la presentación del Estado de Resultados de su empresa. Es decir mi programa tiene la "Opcion por defecto" y la "Definido por el usuario". Es para que ellos ordenen, a "su gusto y antojo", la presentación de las cuentas en el ESTADO DE PERDIDAS O GANANCIAS (ESTADO DE RESULTADOS). Por ejemplo:

LIN DESCRIPCION DE LA CUENTA
1 Ingresos por venta de autos usados
2 Ingresos por venta de chatarra
3 Ingresos por venta de llantas

Si necesitase incluir una nueva cuenta, por ejemplo, Ventas de autos nuevos y quiere que se presente como la 2a. cuenta descrita, el programa lo hace asi:

El operador, o cliente se coloca en la lin 1 e inserta un nuevo registro, lo que hace que los demas registros se desplacen hacia abajo, dejando el recien ingresado en la lin 2. Lo mismo si se decide por introducirlo para que quede entre una deteminada lin y la siguiente. Ej. Si quiere que el nuevo registro se coloque despues de Ingresos por venta de chatarra, lo que hace el usuario es colocarse en la lin 2 e introducir el nuevo registro desplazando al resto hacia abajo . La ordenación la hace la function ReconstLin(nLinea,oQuery), ya descrita.

En cuanto a no user ::Seek, así lo hacía utilizando locate("lin",nlinea) (ambos trabajan bien). Continúo "coqueando".
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: OT: XBrowse-MySql-TMysql

Postby FranciscoA » Tue Mar 13, 2012 3:37 pm

Willi,- mientras posteabas yo estaba escribiendo. No me di cuenta de tu post hasta despues. Me comunico contigo.
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: OT: XBrowse-MySql-TMysql

Postby Willi Quintana » Tue Mar 13, 2012 4:14 pm

Revisa esto:
crea una tabla asi:
Code: Select all  Expand view


CREATE TABLE `gopmult` (
  `idgopmult` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  `lin` CHAR(10) NOT NULL DEFAULT '',
  `detalle` VARCHAR(45) NOT NULL DEFAULT '',
  PRIMARY KEY(`idprueba`)
)
ENGINE = InnoDB;
 

sobre esta tabla que tiene <lin> como tipo char hacemos lo siguiente

Code: Select all  Expand view


// browse inicial

idgopmult    lin      detalle
---------------------------------------------------------------
1                1         aaaaaaaaaaaaa
2                2         bbbbbbbbbbbbb
3                3         ccccccccccccccc
4                4         ddddddddddddd
5                5         eeeeeeeeeeeee


oQry:=oServer:Query("SELECT * FROM gopmult ORDER By lin")
...
//insertamos la 1ra linea
// 1ro leemos el valor de lin en la linea en la que nos ubicamos en el browse

cDetalle := "?????????"
cLin := oQry:Lin
//  duplicamos cLin  
cLin := cLin + oQry:Lin
//  si cLin es "4"  quedara  "44" y luego insertamos

oServer:Query("INSERT INTO gopmult (lin, detalle) VALUES ('" + cLin + "', '" + cDetalle + "')"
oQry:Refresh()
// listo, en el browse debe mostrarse asi:

idgopmult    lin      detalle
---------------------------------------------------------------
1                1         aaaaaaaaaaaaa
2                2         bbbbbbbbbbbbb
3                3         ccccccccccccccc
4                4         ddddddddddddd
5                44        ???????????????????
6                5         eeeeeeeeeeeee
 

comentame,,,,
Salu2
User avatar
Willi Quintana
 
Posts: 1002
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: OT: XBrowse-MySql-TMysql

Postby Raymundo Islas M. » Tue Mar 13, 2012 5:24 pm

Francisco,

Si te entendi, puede que funcione lo siguiente :

- create table tempo select * from datos where row_id > xxxx
- delete from datos where row_id > xxxx
- insert into datos (x,y) values (aaa,bbb)
- insert into datos (x,y,z) select * from tempo
- @r := 0
- update datos set campo = ( @r := @r + 1 )
- drop table tempo

Aqui se requiere tener un campo que maneje el consecutivo de registros ( row_id es igual a recno() ), en mi caso, todas mis tablas lo tienen y lo manejo como auto increment.
solo ajusta los nombres de tus campos y debe funcionar. Ya lo probe aqui usando Navicat en una tabla dummy y funciono al 100%


Saludos
FWH 10.6 + xHarbour + Borland 582
User avatar
Raymundo Islas M.
 
Posts: 592
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Re: OT: XBrowse-MySql-TMysql

Postby FranciscoA » Tue Mar 13, 2012 9:27 pm

Willi, no funcionó.
Si la tabla está vacía inserta bien el "1", al insertar la segunda vez hace lo que dices "11", pero si continúas insertando siempre toma "11". No es el comportamiento deseado:
//--------------------------//
Function InsGopMult(oLbx,oQuery)
LOCAL cLin := oQuery:lin //lin actualmente seleccionada
local cDetalle:= "HOLALALAL "+oQuery:lin

if cLin = "" //sin esto y si la tabla esta vacía, inserta blanco en lin y detalle si lo hace.
cLin := "1"
endif

cLin := cLin + oQuery:lin

oServer:Query("INSERT INTO gopmult (lin, nombre1) VALUES ('" + cLin + "', '" + cDetalle + "')")
oQuery:locate("lin",cLin)
oQuery:Refresh()
oLbx:Refresh()



Raymundo, tu código se comporta parecido al de Willi:

LOCAL nRec := oQuery:Recno()
local cDetalle:= "HOLALALAL "+alltrim(str(nRec))
local cLin := alltrim(str(nRec))
local r:=0

oServer:Query("CREATE TABLE tempo SELECT * FROM gopmult WHERE '"+cValTochar(Recno())+"' > '"+cValToChar(nRec)+"'")
oServer:Query("DELETE FROM gopmult WHERE '"+cValTochar(Recno())+"' > '"+cValToChar(nRec)+"'")
oServer:Query("INSERT INTO gopmult (lin, nombre1) VALUES ('" + cLin + "', '" + cDetalle + "')")
oServer:Query("INSERT INTO gopmult SELECT * FROM tempo")
oServer:Query("UPDATE gopmult SET lin = (@r := @r + 1)") //da Err: column LIN cannot be null, pero inserta el reg.
oServer:Query("DROP TABLE tempo")

oQuery:Refresh()
oLbx:Refresh()

Sigo en la pelea.
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: OT: XBrowse-MySql-TMysql

Postby Raymundo Islas M. » Tue Mar 13, 2012 10:28 pm

Francisco,

No pongas la variable r como local, mandala como un query.

oServer:Query("@r := 0")

Quizas por eso te manda el aviso/error y por ende, no te actualize el consecutivo de registro. Hazlo antes del update

Saludos
FWH 10.6 + xHarbour + Borland 582
User avatar
Raymundo Islas M.
 
Posts: 592
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Re: OT: XBrowse-MySql-TMysql

Postby FranciscoA » Tue Mar 13, 2012 10:47 pm

Raymundo, tienes razón. Dejó de enviar el mensaje e inserta correctamente. Vamos avanzando. Luego comento.
Gracias.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: OT: XBrowse-MySql-TMysql

Postby Willi Quintana » Tue Mar 13, 2012 11:23 pm

Francisco,,, esto debe funcionar....
Code: Select all  Expand view


CREATE TABLE `gopmult` (
  `idgopmult` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  `ctrl` CHAR(10) NOT NULL DEFAULT '',
  `lin` INT(10) NOT NULL DEFAULT '0',
  `detalle` VARCHAR(45) NOT NULL DEFAULT '',
  PRIMARY KEY(`idprueba`)
)
ENGINE = InnoDB;
 
....
...
..
.


// browse inicial

idgopmult   ctrl  lin      detalle
---------------------------------------------------------------
1           1      0   aaaaaaaaaaaaa
2           2      0   bbbbbbbbbbbbb
3           3      0   ccccccccccccc
4           4      0   ddddddddddddd
5           5      0   eeeeeeeeeeeee


oQry:=oServer:Query("SELECT * FROM gopmult ORDER By lin")
...
//insertamos la 1ra linea
// 1ro leemos el valor de lin en la linea en la que nos ubicamos en el browse

cDetalle := "?????????"
cCtrl := oQry:ctrl
//  duplicamos cCtrl  
cLin := cLin + SUBSTR(oQry:ctrl,1,1)
//  si cLin es "4"  quedara  "44" y luego insertamos

oServer:Query("INSERT INTO gopmult (ctrl, detalle) VALUES ('" + cCtrl + "', '" + cDetalle + "')"

oServer:Query("SET @r = 0;")        // declaramos una variable inicial

oServer:Query("UPDATE gopmult SET lin = (@r := @r + 1) ORDER BY crlt")  // actualizamos

oQry:Refresh()
// listo, en el browse debe mostrarse asi:

idgopmult   ctrl  lin      detalle
---------------------------------------------------------------
1           1      1   aaaaaaaaaaaaa
2           2      2   bbbbbbbbbbbbb
3           3      3   ccccccccccccc
4           4      4   ddddddddddddd
6           44     5   xxxxxxxxxxxxx
5           5      6   eeeeeeeeeeeee

 
Last edited by Willi Quintana on Wed Mar 14, 2012 12:36 am, edited 1 time in total.
User avatar
Willi Quintana
 
Posts: 1002
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 100 guests