From hfiandor en ceniai.inf.cu Fri Nov 4 11:20:07 2016 From: hfiandor en ceniai.inf.cu (hfiandor) Date: Fri, 4 Nov 2016 06:20:07 -0400 Subject: [Lazarus-es] leer todos los Record con SQLdb Message-ID: Amigos listeros: En el documento SQLdb How to do se explica por qué solamente se leen los primeros 10 registros al ejecutar una consulta y brinda una solución para que lea todos los registros. Tengo una aplicación donde hago lo siguiente: begin fdm.SQLQuery1.Active := False; fdm.dsSQLQuery1.DataSet:=fdm.tTemp2; fdm.SQLite3Connection1.DatabaseName:=camino_BD + '\temp.db'; fdm.SQLQuery1.SQL.Text := 'SELECT * FROM Temp2 WHERE codNegSerAct = :SelCodigoNegSerAct ORDER BY codNegSerAct'; fdm.SQLQuery1.Params.ParamByName('SelCodigoNegSerAct').AsString := SelNSA; fdm.SQLQuery1.ExecSQL; fdm.tTemp2.Last; //para que lea completo if fdm.SQLQuery1.Active = False then fdm.SQLQuery1.Active := True else begin end; fEstadoCuenta_2.frDBDataSet2.DataSet := fdm.SQLQuery1; fEstadoCuenta_2.frReport2.LoadFromFile(camino_actual+'\plantillas\Extendida_ 2.lrf'); fEstadoCuenta_2.frReport2.ShowReport; fdm.SQLQuery1.Close; fdm.SQLTransaction1.Active := False; fdm.SQLite3Connection1.Connected := False; No tengo la certeza de haber escrito la instrucción fdm.tTemp2.Last; //para que lea completo en el lugar correcto. Agradecería que alguien me comentara al respecto y cualquier otra sugerencia que deseen. Saludos Ing. Héctor F. Fiandor Rosario ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From r.bidegain en gmail.com Fri Nov 4 12:37:12 2016 From: r.bidegain en gmail.com (Rafael Bidegain) Date: Fri, 4 Nov 2016 08:37:12 -0300 Subject: [Lazarus-es] leer todos los Record con SQLdb In-Reply-To: References: Message-ID: Hola Hector. No puedo hacer pruebas como para darte una respuesta mas precisa. busqué el documento al que haces referencia y encontré un texto pero entiendo que 'el truco' de llamar a .last es solo para poder utilizar la propiedad RecordCount. en el ejemplo que enviaste no veo que estés usando esa propiedad, ¿tenés dudas sobre el funcionamiento del select? Creo que si tenés necesidad de ejecutar el método last deberías hacerlo así fdm.SQLQuery1.Last(); si yo tuviese que la necesidad de saber la cantidad de registros de un query setearía la propiedad .PacketRecords' en -1 tal como se indica en el documento. Lamento disponer de un lazarus para hacer pruebas. saludos cordiales, es un gusto leerte otra vez. http://wiki.freepascal.org/SqlDBHowto Why does TSQLQuery.RecordCount always return 10? To count the records in a dataset, use '.RecordCount'. However, notice that '.RecordCount' shows the number of records that is already loaded from the server. For performance reasons, SqlDB does not read all records when opening TSQLQuery by default, only the first 10. Only when the eleventh record is accessed will the next set of 10 records be loaded, etc. Using '.Last', all records will be loaded. When you want to know the real number of records on the server you can first call '.Last' and then call '.RecordCount'. An alternative is available. The number of records returned by the server is set by the '.PacketRecords' property. The default value is 10; if you make it -1 then all records will be loaded at once. In current stable FPC, '.RecordCount' does not take filters into account, i.e. it shows the unfiltered total. If you need the exact number of records, it often is a better idea to directly query the number of records in a query using another SQL query, but you would have to do that in the same transaction, as other transactions may have changed the number of records in the meanwhile. El 4 de noviembre de 2016, 7:20, hfiandor via Lazarus-es < lazarus-es en lists.lazarus-ide.org> escribió: > Amigos listeros: > > > > En el documento SQLdb How to do se explica por qué solamente se leen los > primeros 10 registros al ejecutar una consulta y brinda una solución para > que lea todos los registros. > > > > Tengo una aplicación donde hago lo siguiente: > > begin > > > > fdm.SQLQuery1.Active := False; > > fdm.dsSQLQuery1.DataSet:=fdm.tTemp2; > > fdm.SQLite3Connection1.DatabaseName:=camino_BD + '\temp.db'; > > fdm.SQLQuery1.SQL.Text := 'SELECT * FROM Temp2 WHERE codNegSerAct = > :SelCodigoNegSerAct ORDER BY codNegSerAct'; > > fdm.SQLQuery1.Params.ParamByName('SelCodigoNegSerAct').AsString := > SelNSA; > > fdm.SQLQuery1.ExecSQL; > > fdm.tTemp2.Last; //para que lea completo > > > > if fdm.SQLQuery1.Active = False then fdm.SQLQuery1.Active := True > > else begin end; > > fEstadoCuenta_2.frDBDataSet2.DataSet := fdm.SQLQuery1; > > fEstadoCuenta_2.frReport2.LoadFromFile(camino_actual+'\ > plantillas\Extendida_2.lrf'); > > fEstadoCuenta_2.frReport2.ShowReport; > > > > fdm.SQLQuery1.Close; > > fdm.SQLTransaction1.Active := False; > > fdm.SQLite3Connection1.Connected := False; > > > > No tengo la certeza de haber escrito la instrucción fdm.tTemp2.Last; > //para que lea completo en el lugar correcto. > > > > Agradecería que alguien me comentara al respecto y cualquier otra > sugerencia que deseen. > > > > Saludos > > Ing. Héctor F. Fiandor Rosario > > > > _______________________________________________ > Lazarus-es mailing list > Lazarus-es en lists.lazarus-ide.org > http://lists.lazarus-ide.org/listinfo/lazarus-es > > -- Rafael Bidegain Ya que los cuerdos no hablan, hablará el loco. (The Fool, Padraic Pearse) # yo quiero educación libre. ¡YA! ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From maximiliano.duarte en gmail.com Fri Nov 4 14:52:29 2016 From: maximiliano.duarte en gmail.com (Maxi) Date: Fri, 4 Nov 2016 10:52:29 -0300 Subject: [Lazarus-es] leer todos los Record con SQLdb In-Reply-To: References: Message-ID: como es un motor y uno trae datos "por la red" para no generar un trafico innecesario solo trae algunos registros. Al hacer last si o si debe recorrer la seleccion para obtener todos los registros. Me pasó en mySql El 4 de noviembre de 2016, 8:37, Rafael Bidegain via Lazarus-es < lazarus-es en lists.lazarus-ide.org> escribió: > Hola Hector. > > No puedo hacer pruebas como para darte una respuesta mas precisa. > busqué el documento al que haces referencia y encontré un texto pero > entiendo que 'el truco' de llamar a .last es solo para poder utilizar la > propiedad RecordCount. > > en el ejemplo que enviaste no veo que estés usando esa propiedad, ¿tenés > dudas sobre el funcionamiento del select? > > Creo que si tenés necesidad de ejecutar el método last deberías hacerlo así > fdm.SQLQuery1.Last(); > > si yo tuviese que la necesidad de saber la cantidad de registros de un > query setearía la propiedad .PacketRecords' en -1 tal como se indica en > el documento. > > Lamento disponer de un lazarus para hacer pruebas. > > saludos cordiales, es un gusto leerte otra vez. > > http://wiki.freepascal.org/SqlDBHowto > > Why does TSQLQuery.RecordCount always return 10? > > To count the records in a dataset, use '.RecordCount'. However, notice > that '.RecordCount' shows the number of records that is already loaded from > the server. For performance reasons, SqlDB does not read all records when > opening TSQLQuery by default, only the first 10. Only when the eleventh > record is accessed will the next set of 10 records be loaded, etc. Using > '.Last', all records will be loaded. > > When you want to know the real number of records on the server you can > first call '.Last' and then call '.RecordCount'. > > An alternative is available. The number of records returned by the server > is set by the '.PacketRecords' property. The default value is 10; if you > make it -1 then all records will be loaded at once. > > In current stable FPC, '.RecordCount' does not take filters into account, > i.e. it shows the unfiltered total. > > If you need the exact number of records, it often is a better idea to > directly query the number of records in a query using another SQL query, > but you would have to do that in the same transaction, as other > transactions may have changed the number of records in the meanwhile. > > El 4 de noviembre de 2016, 7:20, hfiandor via Lazarus-es < > lazarus-es en lists.lazarus-ide.org> escribió: > >> Amigos listeros: >> >> >> >> En el documento SQLdb How to do se explica por qué solamente se leen los >> primeros 10 registros al ejecutar una consulta y brinda una solución para >> que lea todos los registros. >> >> >> >> Tengo una aplicación donde hago lo siguiente: >> >> begin >> >> >> >> fdm.SQLQuery1.Active := False; >> >> fdm.dsSQLQuery1.DataSet:=fdm.tTemp2; >> >> fdm.SQLite3Connection1.DatabaseName:=camino_BD + '\temp.db'; >> >> fdm.SQLQuery1.SQL.Text := 'SELECT * FROM Temp2 WHERE codNegSerAct = >> :SelCodigoNegSerAct ORDER BY codNegSerAct'; >> >> fdm.SQLQuery1.Params.ParamByName('SelCodigoNegSerAct').AsString := >> SelNSA; >> >> fdm.SQLQuery1.ExecSQL; >> >> fdm.tTemp2.Last; //para que lea completo >> >> >> >> if fdm.SQLQuery1.Active = False then fdm.SQLQuery1.Active := True >> >> else begin end; >> >> fEstadoCuenta_2.frDBDataSet2.DataSet := fdm.SQLQuery1; >> >> fEstadoCuenta_2.frReport2.LoadFromFile(camino_actual+'\plant >> illas\Extendida_2.lrf'); >> >> fEstadoCuenta_2.frReport2.ShowReport; >> >> >> >> fdm.SQLQuery1.Close; >> >> fdm.SQLTransaction1.Active := False; >> >> fdm.SQLite3Connection1.Connected := False; >> >> >> >> No tengo la certeza de haber escrito la instrucción fdm.tTemp2.Last; >> //para que lea completo en el lugar correcto. >> >> >> >> Agradecería que alguien me comentara al respecto y cualquier otra >> sugerencia que deseen. >> >> >> >> Saludos >> >> Ing. Héctor F. Fiandor Rosario >> >> >> >> _______________________________________________ >> Lazarus-es mailing list >> Lazarus-es en lists.lazarus-ide.org >> http://lists.lazarus-ide.org/listinfo/lazarus-es >> >> > > > -- > Rafael Bidegain > > Ya que los cuerdos no hablan, hablará el loco. > (The Fool, Padraic Pearse) > > # yo quiero educación libre. ¡YA! > > > _______________________________________________ > Lazarus-es mailing list > Lazarus-es en lists.lazarus-ide.org > http://lists.lazarus-ide.org/listinfo/lazarus-es > > -- El que pregunta aprende, y el que contesta aprende a responder. No a la obsolecencia programada: http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml Linux User #495070 http://domonetic.com/blog ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From jcuello en artextrading.com Fri Nov 4 15:51:49 2016 From: jcuello en artextrading.com (Jose Antonio Cuello) Date: Fri, 4 Nov 2016 15:51:49 +0100 (CET) Subject: [Lazarus-es] leer todos los Record con SQLdb In-Reply-To: References: Message-ID: <323143658.192687.1478271109791.JavaMail.zimbra@artextrading.com> Hola, no termino de entender el problema respecto al código que introduces. Personalmente no realizaría un execute sino un open sobre el dataset. Eso debería traer todos los registros. "Traer" no significa que te lea de "golpe" todo sino que el cursor solicita los datos al servidor y este los tiene preparados. Cuando te vayas moviendo por el dataset el motor de bases de datos irá dando al dataset lo que necesite. Creo que te bastaría con: begin fdm.SQLite3Connection1.DatabaseName:=camino_BD + '\temp.db'; fdm.SQLite3Connection1.Open; fdm.dsSQLQuery1.DataSet:=fdm.tTemp2; // Esto no sé para que es fdm.SQLQuery1.Close; fdm.SQLQuery1.SQL.Text := 'SELECT * FROM Temp2 WHERE codNegSerAct = :SelCodigoNegSerAct ORDER BY codNegSerAct'; fdm.SQLQuery1.Params.ParamByName('SelCodigoNegSerAct').AsString := SelNSA; fdm.SQLQuery1.Open; fEstadoCuenta_2.frReport2.LoadFromFile(camino_actual+'\plantillas\Extendida_2.lrf'); fEstadoCuenta_2.frDBDataSet2.DataSet := fdm.SQLQuery1; fEstadoCuenta_2.frReport2.ShowReport; fdm.SQLQuery1.Close; fdm.SQLite3Connection1.Close; De: "hfiandor via Lazarus-es" Para: lazarus-es en lists.lazarus-ide.org CC: "hfiandor" Enviados: Viernes, 4 de Noviembre 2016 11:20:07 Asunto: [Lazarus-es] leer todos los Record con SQLdb Amigos listeros: En el documento SQLdb How to do se explica por qué solamente se leen los primeros 10 registros al ejecutar una consulta y brinda una solución para que lea todos los registros. Tengo una aplicación donde hago lo siguiente: begin fdm.SQLQuery1.Active := False; fdm.dsSQLQuery1.DataSet:=fdm.tTemp2; fdm.SQLite3Connection1.DatabaseName:=camino_BD + '\temp.db'; fdm.SQLQuery1.SQL.Text := 'SELECT * FROM Temp2 WHERE codNegSerAct = :SelCodigoNegSerAct ORDER BY codNegSerAct'; fdm.SQLQuery1.Params.ParamByName('SelCodigoNegSerAct').AsString := SelNSA; fdm.SQLQuery1.ExecSQL; fdm.tTemp2.Last; //para que lea completo if fdm.SQLQuery1.Active = False then fdm.SQLQuery1.Active := True else begin end; fEstadoCuenta_2.frDBDataSet2.DataSet := fdm.SQLQuery1; fEstadoCuenta_2.frReport2.LoadFromFile(camino_actual+'\plantillas\Extendida_2.lrf'); fEstadoCuenta_2.frReport2.ShowReport; fdm.SQLQuery1.Close; fdm.SQLTransaction1.Active := False; fdm.SQLite3Connection1.Connected := False; No tengo la certeza de haber escrito la instrucción fdm.tTemp2.Last; //para que lea completo en el lugar correcto. Agradecería que alguien me comentara al respecto y cualquier otra sugerencia que deseen. Saludos Ing. Héctor F. Fiandor Rosario _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus-ide.org http://lists.lazarus-ide.org/listinfo/lazarus-es ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From hfiandor en ceniai.inf.cu Fri Nov 4 17:14:26 2016 From: hfiandor en ceniai.inf.cu (hfiandor) Date: Fri, 4 Nov 2016 12:14:26 -0400 Subject: [Lazarus-es] leer todos los Record con SQLdb In-Reply-To: References: Message-ID: Amigos listeros y personales: Usé la propuesta del PacketRecords y no la del .last. Gracias a todos. Saludos Ing. Héctor F. Fiandor Rosario ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From hfiandor en ceniai.inf.cu Sat Nov 5 16:12:04 2016 From: hfiandor en ceniai.inf.cu (hfiandor) Date: Sat, 5 Nov 2016 11:12:04 -0400 Subject: [Lazarus-es] tabla que no se activa Message-ID: Estimados listeros: Estoy trabajando con Lazarus y tablas SQLite. Estoy desarrollando una aplicación que tiene una form para Seleccionar, donde hay un botón para hacer una consulta. Cuando se presiona y aparece la pantalla, se activan dos tablas con valores para ser cargados a una nueva tabla: tTemp2. Esta consulta para mi resulta algo compleja, y la solución que aplico es cargar en la nueva tabla (tTemp2) algunos valores. Esto se muestra en un Reporte usando SQLQuery1. Cuando termina, hago lo siguiente: fdm.SQLQuery1.Close; fdm.SQLTransaction1.Active := False; fdm.SQLite3Connection1.Connected := False; seguido de: fdm.tTemp2.Close; if fdm.ttemp2.TableExists then begin try fdm.ttemp2.FileName := camino_BD + '\temp.db'; fdm.ttemp2.SQL := 'DROP TABLE Temp2'; fdm.ttemp2.ExecSQL; except ShowMessagePos('No dropeo',10,10); end; end else begin ShowMessagePos('al final de SelNSA temp2 no existe',10,10); end; Hasta aquí, por primera vez, todo lo hace bien. Regreso a la pantalla de Selección. Si presiono por segunda vez el botón de hacer la consulta, el proceso comienza, pero la tabla tTemp2 no se activa (como lo hace la primera vez). Esto me obliga a "salir" y comenzar de nuevo para que trabaje bien (solamente es feliz la primera vez). Quiero aprender por qué no se activa. Si me pueden ayudar, lo voy a agradecer infinitamente Saludos Ing. Héctor F. Fiandor Rosario _______________________________________________ sqlite-users mailing list sqlite-users en mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users From iv.mesa.prg en gmail.com Sat Nov 5 17:43:22 2016 From: iv.mesa.prg en gmail.com (=?UTF-8?Q?Iv=c3=a1n_gmail?=) Date: Sat, 5 Nov 2016 17:43:22 +0100 Subject: [Lazarus-es] tabla que no se activa In-Reply-To: References: Message-ID: Muy buenas Héctor. ¿Puede ocurrir que no vuelvas a conectar SQLite3Connection1? Abrazos Iván El 05/11/2016 a las 16:12, hfiandor via Lazarus-es escribió: > fdm.SQLite3Connection1.Connected := False; From mmgomez en gmail.com Sat Nov 5 19:33:10 2016 From: mmgomez en gmail.com (Martin Gomez) Date: Sat, 5 Nov 2016 15:33:10 -0300 Subject: [Lazarus-es] tabla que no se activa In-Reply-To: References: Message-ID: Puede tener que ver con las transacciones automaticas (se abre una cuando haces cualquier operacion) Si antes de salir haces un Commit, deberia funcionar cada vez. 2016-11-05 12:12 GMT-03:00 hfiandor via Lazarus-es < lazarus-es en lists.lazarus-ide.org>: > Estimados listeros: > Estoy trabajando con Lazarus y tablas SQLite. > Estoy desarrollando una aplicación que tiene una form para Seleccionar, > donde hay un botón para hacer una consulta. > Cuando se presiona y aparece la pantalla, se activan dos tablas con > valores para ser cargados a una nueva tabla: tTemp2. > Esta consulta para mi resulta algo compleja, y la solución que aplico es > cargar en la nueva tabla (tTemp2) algunos valores. Esto se muestra en un > Reporte usando SQLQuery1. > Cuando termina, hago lo siguiente: > > fdm.SQLQuery1.Close; > fdm.SQLTransaction1.Active := False; > fdm.SQLite3Connection1.Connected := False; > seguido de: > fdm.tTemp2.Close; > > if fdm.ttemp2.TableExists then > begin > try > fdm.ttemp2.FileName := camino_BD + '\temp.db'; > fdm.ttemp2.SQL := 'DROP TABLE Temp2'; > fdm.ttemp2.ExecSQL; > except ShowMessagePos('No dropeo',10,10); > end; > end else begin ShowMessagePos('al final de SelNSA temp2 no > existe',10,10); end; > > Hasta aquí, por primera vez, todo lo hace bien. Regreso a la pantalla de > Selección. > > Si presiono por segunda vez el botón de hacer la consulta, el proceso > comienza, pero la tabla tTemp2 no se activa (como lo hace la primera vez). > > Esto me obliga a "salir" y comenzar de nuevo para que trabaje bien > (solamente es feliz la primera vez). > > Quiero aprender por qué no se activa. Si me pueden ayudar, lo voy a > agradecer infinitamente > > Saludos > Ing. Héctor F. Fiandor Rosario > > > > > _______________________________________________ > sqlite-users mailing list > sqlite-users en mailinglists.sqlite.org > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users > > _______________________________________________ > Lazarus-es mailing list > Lazarus-es en lists.lazarus-ide.org > http://lists.lazarus-ide.org/listinfo/lazarus-es > -- ​ Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program. ​ ​ *Linus Torvalds* ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: