Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Like

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Like Responder citando

AYUDA:

Hago esta consulta para buscar todos los campos que empiezen por el caracter "+", y me funciona perfectamente. El problema es que no sé cual es la sentencia para cambiar el "+" por "con".
Esta es la sentencia que hago en la busqueda:
Código:

SELECT TextoBoton FROM Articulos WHERE TextoBoton like '+%';


Alguien me puede orientar con una sentencia UPDATE en SQL para realizar mi cometido, o en su defecto, alguna función en INTERBASE para cambiar contenido de cadenas. De antemano gracias.
_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Responder citando

PERDON
_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.


Ultima edición por JesúsGandia el Dom 27 Nov, 2005 9:46 am, editado 1 vez
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Re: Like Responder citando

He probado esto:
Código:

UPDATE SET TextoBoton = (like 'con%') WHERE TextoBoton like '+%';

Pero no funciona, me da ERROR
_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Va a depender del motor de manejo de la DDBB que utilices, por ejemplo para ACCESS funcionaria
Código:
UPDATE SET TextoBoton = "con" + Mid(TextoBoton,2) WHERE TextoBoton like '+%';

Para postgres me suena substr(...
Prueba por esta via que no debe haber muchas variaciones.
Saludos
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Utilizo INTERBASE y la función Mid no la reconoce.
_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Responder citando

La funcion Mid es para msacces, lo que he visto para postgres, es que para sumar 2 cadenas utiliza 2 pipelines (char 128), algo así
cad1 || cad2, por otro lado me suena la funcion concat(cad1, cad2).

Has probado algo como:
Cita:
UPDATE SET TextoBoton = "con" || substring(TextoBoton,2,xx) WHERE TextoBoton like '+%'

xx es el maximo que puede poner para no sobrepasar la longitud del campo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Gracias, pero tampoco funciona.
Lo máximo que puedo conseguir es esto:
Código:

UPDATE Articulos SET TextoBoton = 'con Coca Cola' WHERE TextoBoton = '+ Coca Cola'

Pero no es lo bastante potente.
y tengo que ir registro por registro encontrando que tenga el caracter '+', para sustituirlo por 'con', y claro esto es una faena descomunal !!!.
_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Responder citando

No es elegante, pero si solo lo haces para normalizar la BD..
Código:

AnsiString sCadena="";
qry->Close();
qry->SQL->Clear(); // id es tu campo llave OJO..elque tengas como llave
qry->SQL->Add("SELECT id,descripcion FROM tuTabla");
qry->Open(); // este lo pones en read only

while (qry->Eof==false)
 {
 sCadena=qry->FieldByName("descripcion")->AsString;
 for(int i=0;i<sCadenda.Lenght-1)
  {
  if(sCadena.SubString(i,1)=="+"
      {
     qry2->Close();
     qry2->SQL->Clear();
     qry2->SQL->Add("UPDATE tuTabla SET descripcion="+
          sCadena.SubString(1,i-1)+" con "+
          sCadena.Substring(i+1,sCadenda.Lenght-1)+
          " WHERE id='"+qry->FieldByName("id")->AsString+"'");
   // Si tu llave es NUMERO
   //       " WHERE id="+IntToStr(qry->FieldByName("id")->AsInteger));

    qry2->ExecSQL();
   
     
      i=sCadena.Length+1; // Sale del ciclo for a
      }

  }

 qry->Next();
 }


Nunca escribo tanto codigo, pero este post lleva mucho tiempo
estyoseguro que si va a funcionar, tal vez tenga algun error en loslimites
de la cadena, por que no lo he probado con el compilador
pero ese es el concepto
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Touchsoftwares, te agradezco todo el código y esfuerzo que has hecho para ayudarme, pero esta idea se me había ocurrido. Es decir traerme a mi aplicación todo el texto del campo que quiero cambiar, aplicarle una función del builder y retornarlo con UPDATE a la base de datos.
La cuestión es, que me gustaría hacer esto con una sentencia de SQL (Para INTERBASE), sé que debe de haber una forma, pero he rebuscado por la Web sin éxito. Como he dicho antes te agradezco muchísimo el esfuerzo que has hecho, pero me parece mentira que con tanta gente que hay en el foro, a nadie mas que a mi le aya surgido este dilema. Así pues seria de suma ayuda para todos en un futuro, que si alguien lo haya resuelto lo ponga en el foro, para que así todos podamos beneficiarnos de ello. He estado buscando en la cara oculta de C++ Builder, en la ayuda de INTERBASE, en los foros de discusión, en los cursos de SQL y… nada, que no doy con la solución.

Tengo un libro de SQL estándar llamado, FUNDAMENTOS DE SQL, en el cual he encontrado un función que hace lo que realmente quiero. Pero ignoro si existe en el SQL de INTERBASE, ni sé como aplicarla, la función es la siguiente:

REPLACE
Propósito
En la cadena designada por el primer argumento, busca el patrón designado por el segundo argumento y lo reemplaza con los caracteres indicados en el tercer argumento.
Sintaxis
REPLACE (cadena-SQL-en-que-se-busca, cadena-SQL-que-se-busca, Cadena-SQL-de-reemplazo)
Argumentos
Los tres argumentos de expresion_de_cadena_SQL son expresiones SQL validas que equivalen a cadenas o datos binarios. Esta función sirve para cadenas o datos binarios.


Seguro que LEO, CESAR o algún otro pueden ayudar si su tiempo se lo permite.

GRACIAS A TODOS, por vuestra paciencia.


Al final y muy a pesar mio he tenido que implementar esto:
Código:

UPDATE Articulos SET TextoBoton = 'con Coca Cola' WHERE TextoBoton = '+ Coca Cola';
UPDATE Articulos SET TextoBoton = 'con F.Limón' WHERE TextoBoton = '+ F.Limón';
UPDATE Articulos SET TextoBoton = 'con F.Limón' WHERE TextoBoton = '+ F. Limón';
UPDATE Articulos SET TextoBoton = 'con F.Naranja' WHERE TextoBoton = '+ F.Naranja';
UPDATE Articulos SET TextoBoton = 'con F.Naranja' WHERE TextoBoton = '+ F. Naranja';
UPDATE Articulos SET TextoBoton = 'con Tónica Nordic' WHERE TextoBoton = '+ Tónica Nordic';
UPDATE Articulos SET TextoBoton = 'con BURN' WHERE TextoBoton = '+ BURN';
UPDATE Articulos SET TextoBoton = 'con Zumo Embotellado' WHERE TextoBoton = '+ Zumo Enbotellado';
UPDATE Articulos SET TextoBoton = 'con Zumo Embotellado' WHERE TextoBoton = '+ Zumo Embotellado';
UPDATE Articulos SET TextoBoton = 'con Coca Cola Ligth' WHERE TextoBoton = '+ Cola Cola Ligth';
UPDATE Articulos SET TextoBoton = 'con Coca Cola Ligth' WHERE TextoBoton = '+ Coca Cola Ligth';
UPDATE Articulos SET TextoBoton = 'con Ginger Ale' WHERE TextoBoton = '+ Ginger Ale';
UPDATE Articulos SET TextoBoton = 'con Sprite' WHERE TextoBoton = '+ Sprite';
UPDATE Articulos SET TextoBoton = 'con Agua' WHERE TextoBoton = '+ Agua';
UPDATE Articulos SET TextoBoton = 'con Agua con Gas' WHERE TextoBoton = '+ Agua con Gas';
UPDATE Articulos SET TextoBoton = 'con Nestea' WHERE TextoBoton = '+ Nestea';
UPDATE Articulos SET TextoBoton = 'con Schweppes Naranja' WHERE TextoBoton = '+ Schweppes Naranja';
UPDATE Articulos SET TextoBoton = 'con Tónica Schweppes' WHERE TextoBoton = '+ Tónica Schweppes';
UPDATE Articulos SET TextoBoton = 'con Schweppes Limón' WHERE TextoBoton = '+ Schweppes Limón';
UPDATE Articulos SET TextoBoton = 'con Soda' WHERE TextoBoton = '+ Soda';
UPDATE Articulos SET TextoBoton = 'con Soda' WHERE TextoBoton = '+ Sosa';
UPDATE Articulos SET TextoBoton = 'con OTROS' WHERE TextoBoton = '+ OTROS';
UPDATE Articulos SET TextoBoton = 'con Cholec Vainilla' WHERE TextoBoton = '+ Cholec Vainilla';
UPDATE Articulos SET TextoBoton = 'con Cholec Chocolate' WHERE TextoBoton = '+ Cholec Chocolate';
UPDATE Articulos SET TextoBoton = 'con Z.Naranja Natural' WHERE TextoBoton = '+ Z.Naranja Natural';
UPDATE Articulos SET TextoBoton = 'con Z.Limón Natural' WHERE TextoBoton = '+ Z.Limón Natural';
UPDATE Articulos SET TextoBoton = 'con Z.Manzana Natural' WHERE TextoBoton = '+ Z.Manzana Natural';
UPDATE Articulos SET TextoBoton = 'con Z.Melón Natural' WHERE TextoBoton = '+ Z.Melón Natural';
UPDATE Articulos SET TextoBoton = 'con Licor Mora' WHERE TextoBoton = '+ Licor Mora';
UPDATE Articulos SET TextoBoton = 'con Jarabe Fresa' WHERE TextoBoton = '+ Jarabe Fresa';
UPDATE Articulos SET TextoBoton = 'con Granadina' WHERE TextoBoton = '+ Granadina';
UPDATE Articulos SET TextoBoton = 'con Lima' WHERE TextoBoton = '+ Lima';
UPDATE Articulos SET TextoBoton = 'con Kiwi' WHERE TextoBoton = '+ Kiwi';
UPDATE Articulos SET TextoBoton = 'con Licor Blue' WHERE TextoBoton = '+ Licor Blue';
UPDATE Articulos SET TextoBoton = 'con Z.Manzana Natural' WHERE TextoBoton = '+ Z.Manzana Natual';
UPDATE Articulos SET TextoBoton = 'con Z.Melón Natural' WHERE TextoBoton = '+ Z.Melón Natual';
UPDATE Articulos SET TextoBoton = 'con Z.Naranja Natural' WHERE TextoBoton = '+ Z.Naranja Natual';
UPDATE Articulos SET TextoBoton = 'con Z.Limón Natural' WHERE TextoBoton = '+ Z.Limón Natual';
UPDATE Articulos SET TextoBoton = 'con Z.Limón Natural' WHERE TextoBoton = '+ Z.Limon Natural';
UPDATE Articulos SET TextoBoton = 'Desperados' WHERE TextoBoton = ' Desperados';

_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Ya veo que tienes solucionado el problema aunque como se suele decir 'a mano'.

Solo comentarte que creo es mejor usar el código de Touchsoftwares(aunque busca todas las secuencias + en la linea y tu necesitas la primera) ya que no se dejará ningun registro y traer lo datos al cliente siempre lo tendras que hacer con tu método ya que tendras que visualizar los que tienes que cambiar.
Te envio este codigo mas adaptado a tu rutina:
Código:
qry->SQL->Clear();
qry->SQL->Add("SELECT TextoBoton FROM Articulos");
qry->Open(); // este lo pones en read only

while (qry->Eof==false) {
  if(qry->FieldByName("TextoBoton")->AsString.SubString(1,1)=="+" { 
      qry2->SQL->Clear();
      qry2->SQL->Add("UPDATE Articulos SET TextoBoton= "'con"+
              qry->FieldByName("TextoBoton")->AsString.Substring(2,nMaxLen-3)+
              "' WHERE TextoBoton='"+qry->FieldByName("TextoBoton")->AsString+"'");
                 //nota: en where se debería usar campo llave SIEMPRE.
      qry2->ExecSQL();
   
      qry2->Close();       
      }
    }
  qry->Next();
  }

qry->Close();


Por cierto repites la secuencia update con ciertos articulos que ya estarian cambiados en la primera sentencia.

Por ultimo, por si le sirve a alguien, yo he probado en el pgAdmin de posgres la sentencia:
Código:
Update agencias Set dsc = 'prb' || substr(dsc,3,37) where dsc like 'Mi%'

y ha funcionado perfectamente, aunque luego he realizado lo mismo con un programa que tengo en C++Builder que maneja la misma DDBB a traves de odbc (y componentes ADO) y aunque no daba error, solo cambiaba un registro Crying or Very sad , a pesar de que si ejecutaba un Select con el where me mostraba todos. Exclamation
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.