Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Pasar consulta de FireBird a MS SQL server 2000 (https://www.clubdelphi.com/foros/showthread.php?t=24650)

sakuragi 29-08-2005 18:29:53

Pasar consulta de FireBird a MS SQL server 2000
 
hola que tal

encontre una funcion por aqui e los foros

pero viene en fireBird

no eh podido pasar una sentencia a ms sql.

este el codigo en FIREBIRD

Código SQL [-]
 select codemp,nombre,apellidos
 from empleados
 where (rtrim(nombre) ||'' ''|| rtrim(apellidos)) containing :data

:date es de

parambyname('data'+inttostr(n)).asstring:=cadena[n];

esto lo saque de la una consulta que se parese al winamp.

"containing" esta funcion de firebird no se como haser en MS sql para que funcione igual

bueno les pongo el codigo de toda la consulta tipo winamp hecha por vtdeleon

Código Delphi [-]
 procedure Tfrmbuscar.FormCreate(Sender: TObject);
   begin
     vbusca.Clear;//Edit
     Codigo:='';//DECLARADA PRIVATE
     cadena:=TStringList.Create;//DECLARADA PRIVATE
       Query1.Close;
       with Query1.SQL do begin
         Clear;
         Add('select Codemp, Nombre, apellidos');//+column );
         Add('from empleados');//+tabla);
       end;
       Query1.Open;
   end;
   
   procedure Tfrmbuscar.vbuscaKeyUp(Sender: TObject; var Key: Word;
     Shift: TShiftState);
   var
     n:integer;
   begin
 if (Length(trim(vbusca.Text))>0) then
     if key in [VkKeyScanA('A')..VkKeyScan('Z'), VkKeyScanA('0')..VkKeyScan('9'),
      VK_BACK, vk_space, vk_delete] then begin
         cadena.CommaText:=vbusca.Text;
       with Query1 do begin
         Close;
         if cadena.Count<>nkey then begin
           condi:=' (rtrim(nombre) ||'' ''|| rtrim(apellidos)) containing :data'+'0';
           for n:= 1 to cadena.Count-1 do begin
             condi:=condi +' and (rtrim(nombre) ||'' ''|| rtrim(apellidos)) containing :data'+inttostr(n);
           end;
           if SQL.Count>2 then
             sql.Delete(2);
           sql.Insert(2,'where '+condi);
         end;
         for n:=0 to ParamCount-1 do begin
           ParamByName('data'+inttostr(n)).AsString:=cadena[n];
         end;
         nkey:=n;
         if not Prepared then
           Prepare;
         Open;
       end; 

     end;{ else key:=  #0;}
   end;

ya le he estado intentando hasrlo funcionar con ms sql pero me ha sido en bano

eh modificado mucho pero creo que el principal problem esta en
Código Delphi [-]
condi:=' (rtrim(nombre) ||'' ''|| rtrim(apellidos)) containing :data'+'0'
si me equivoco espero me corrijan

lo e puesto asi
Código Delphi [-]
condi:=' (rtrim(nombre)+'' ''+rtrim(apellidos));

me marca erro de parentecis =S

cual quier ayuda sera muy bien agradecida

gracias

saludos

ContraVeneno 29-08-2005 21:05:07

No he podido probar el código SQL, pero creo que || se cambia por | y containing por having. Es decir:
Código SQL [-]
select codemp,nombre,apellidos
from empleados
Having (trim(nombre) | trim(apellidos)) :data
Esto no lo he podido comprobar, solo espero que al menos te de una idea (y si mi idea es totalmente errónea, pues tambien sáquenme de mi ignorancia :D )

Con respecto a tu cambio, creo que sería:

Código Delphi [-]
condi:=' (rtrim(nombre) + '' '' + rtrim(apellidos)) ';

sakuragi 29-08-2005 23:18:13

muchas gracias contraveneno

lo probare

saludos

depues te digo como me fue

sakuragi 30-08-2005 00:29:30

nop no corrio

dice que no es .

tambien probe con "contains"

y tampoco.

marca erro "objeto parameter mal definido"

=S

creo que hando mas perdido que un machihui de 15 dias

probe asi

Código Delphi [-]
 condi:='having (rtrim(nombre)+'' ''+ rtrim(apellidos)):data'+'0';

y tambien

Código Delphi [-]
 condi:=' (rtrim(nombre) +'' ''+ rtrim(apellidos))having :data'+'0';

Código Delphi [-]
 condi:='having (rtrim(nombre) | rtrim(apellidos)):data'+'0';

y varias mas formas =S


se supones el sql deve ser igual donde sea ¬¬

=P

saludos

vtdeleon 30-08-2005 01:56:51

Saludos

Código Delphi [-]
condi:='(rtrim(nombre) | rtrim(apellidos)) like '+ QuoteStr('%'+Vardata[n]+'%') ;
En lugar de utilizar el parametro data, la cual la utilice como un arreglo para el proposito. Puedes declara un variable String (VarData:array of string).
Pues con el || no estoy seguro como se debe utilizar en MSSQL pero intenta con '&'

sakuragi 30-08-2005 19:12:01

gracias por responder otraves.

ahiva mas o menos

el problem que tengo ahora

es de pasar el texto del edit

a la variabe

vardata

ya que con
Código Delphi [-]
 cadena.commatext:=edit.text;

pasar el texto a la variable cadena y si ahi un espacio los separa por item como en una lista

el probla que teno esl como pasar eso al "vardata" para comparar esos token con [n]

eh intengo asi:
Código Delphi [-]
 vardata:=cadena.text;
 
 vardata:=cadena[n];
 
 vardata:=cadena.commatext;

creo que para aseder a esalista que se genera separando es (x,y) para pasarse para abajo

por que pongo cadena[n] pero nomas cuando es "1" me da el valor ya cuando es "2" no me lo da, entonses crewo que deve ser "2,1"

=S


saludos
saludos

sakuragi 30-08-2005 19:35:10

bueno ya resolvi ese pequeño problemita

puse a recompilar el cerebro

y salio que

Código Delphi [-]
 cadena.strings[n];

me daba lo que estaba buscado

saludos

:cool:

ContraVeneno 30-08-2005 20:02:02

Que bueno que ya se resolvió. La siguiente tarea será escribir un mensaje sin errores de ortografía. :D :D
Lo digo con todo respeto.
Saludos.

sakuragi 30-08-2005 20:51:09

buen punto

creo que mi compilador handa fallando en ese aspecto
:D


La franja horaria es GMT +2. Ahora son las 14:42:26.

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