Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Problemas de nuevo (https://www.clubdelphi.com/foros/showthread.php?t=38072)

kcbb 01-12-2006 15:10:30

Problemas de nuevo
 
Epa panas, tengo un problema trabajando con delphi 5, mi proveedor de BD es AS400, tengouna rutina para hacer select grandes, mas de 255 caracteres, tengo que hacerlos fraccionados, el problema es que cuando trato de usar la sentencia SQL de nuevo da un error. si alguien me puede ayudar se lo agradesco, aqui estoy poniendo el codigo y el error :


"Project cadivi_platinium.exe raised exception class EDBEngine error with message 'inknown internal operating system error.'. process stopped. use or run to continue"

y el codigo es el siguiente


if (nu_reg = 25) then
begin

prueba:= TQuery.Create(self);
with prueba do
begin
DatabaseName := 'qwert';
Close;
UnPrepare;
sql.clear;
sql.add('select s.nu_rif, s.nu_cadivi, p.tx_nombre, s.mt_soli,p.tp_pago from soli s, pimp p where s.nu_soli = p.nu_soli and nu_cadivi in ');
sql.add(' (02546025,02596282,02598001,02600040,02617583,02622689,02628792,02629732,02638452,02639729,02647063, 02647222,02648068,02658368,02667740,02699870,02727455,02727591,02740999,02754777,02759470,02794618,0 2798378,02799152,02811602)');
Prepare;
open;
end;
graba_rx;
prueba.sql.CleanupInstance;
prueba.Destroy;
end;

Espero la respuesta de un guru jejejejje

Caral 01-12-2006 17:44:19

Hola kcbb
Creo que ayer dieron Roman y Bicho la respuesta a esto pero creo que tu problema se soluciona asi:
Código Delphi [-]
sql.clear;
sql.add('select s.nu_rif, s.nu_cadivi, p.tx_nombre, s.mt_soli,p.tp_pago');
sql.add(' from soli s, pimp p where s.nu_soli = p.nu_soli and nu_cadivi in ');
sql.add('(02546025,02596282,02598001,02600040,02617583,02622689,');
sql.add(' 02628792,02629,732,02638452,02639729,02647063,'); 
sql.add(' 02647222,02648068,02658368,02667740,02699870,');
sql.add(' 02727455,02727591,02740999,02754777,02759470,02794618,0,');
 sql.add(' 2798378,02799152,02811602)');
Prepare;
Osea separando los caracteres, no se si con este otro serviria tambien:
Código Delphi [-]
sql.clear;
sql.add('select s.nu_rif, s.nu_cadivi, p.tx_nombre, s.mt_soli,p.tp_pago');
sql.add(' from soli s, pimp p where s.nu_soli = p.nu_soli and nu_cadivi in ');
sql.add('(02546025,02596282,02598001,02600040,02617583,02622689,'+
          ' 02628792,02629,732,02638452,02639729,02647063,'+ 
          ' 02647222,02648068,02658368,02667740,02699870,'+
          ' 02727455,02727591,02740999,02754777,02759470,02794618,0'+ 
          ' 2798378,02799152,02811602)');
Prepare;
En este ultimo los maestros te podrian dar su opinion.
Otra cosa usa las etiquetas para que el codigo se entienda mejor
Saludos

yusnerqui 01-12-2006 18:21:49

Hola, yo personalmente lo hago así:

Código Delphi [-]
sql.text:='select s.nu_rif, s.nu_cadivi, p.tx_nombre, s.mt_soli,p.tp_pago'+
             ' from soli s, pimp p where s.nu_soli = p.nu_soli and nu_cadivi in '+
             '(02546025,02596282,02598001,02600040,02617583,02622689,'+
             '...';
Usando la propiedadad text lo que me evito es tener que limpiar con sql.clear antes de añadir la nueva sentencia.

No se cuan correcto esté esto, pero a mi siempre me ha dado resultado.

Saludos Yusnerqui.

Lepe 01-12-2006 18:27:10

Cita:

Empezado por yusnerqui
No se cuan correcto esté esto, pero a mi siempre me ha dado resultado.

Al asignar un valor a la propiedad Text, internamente se hace un Clear antes, así que no solo es correcto, sino que ahorras una línea de código, amén de ser más eficiente que añadir varias líneas, es una sola asignación.

Normalmente se usa el método Add para clarificar el código y quizás más por gusto que otra cosa.

Saludos

Bicho 01-12-2006 18:33:51

Hoy no dejo de repetir lo que dice Lepe, pero es que hay que darle la razón :p
Al usar la propiedad SQl.Text, estás haciendo una asignación, con lo cual borras el contenido anterior y te quedas con el que le has asignado.
Pero personalmente siempre uso el SQL.Add, para clarificar, comodidad y costumbre.

Por otro lado, kcbb no ha comentado si le ha ido bien. Yo intuyo que los tiros no van por ahí, porque esta linea del SQL no llega a los 255 carácteres

Cita:

Empezado por kcbb
Código SQL [-]
sql.add(' (02546025,02596282,02598001,02600040,02617583,02622689,02628792,02629732,02638452,02639729,02647063, 
02647222,02648068,02658368,02667740,02699870,02727455,02727591,02740999,02754777,02759470,02794618,0 2798378,02799152,02811602)');

con lo cual, creo que no es la razón del error que le dá. Por el tipo de error, me suena más a que tiene activada la opción de Stop en Delphi Exception (Menu Tools => Debugger Options => Pestaña Language Exceptions => Checkbox "Stop on delphi exceptions" hay que desmarcarlo)

Esperamos tu respuesta para saber que ha sido al final.

Saludos

kcbb 03-12-2006 08:00:42

Di con el problema, segun lo que me imagino, y me jefe igual.
estaba migrando informacion de 3 BD diferentes a una 4ta BD, resulta que las conexiones con las otras BD me estaban consumiendo la memoria, la solucion fue crear el objeto, usarlo y destriurlo. Por si a alguien mas le sirve, gracias a las personas que respondieron a mi inquitud


La franja horaria es GMT +2. Ahora son las 08:05:02.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi