 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
JesúsGandia Master


Registrado: 17 Jul 2004Mensajes: 403Ubicación: Gandia, Valencia
|
Publicado: Dom 27 Nov, 2005 9:25 am Asunto: Like |
|
|
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 |
|
 |
JesúsGandia Master


Registrado: 17 Jul 2004Mensajes: 403Ubicación: Gandia, Valencia
|
Publicado: Dom 27 Nov, 2005 9:42 am Asunto: |
|
|
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 |
|
 |
JesúsGandia Master


Registrado: 17 Jul 2004Mensajes: 403Ubicación: Gandia, Valencia
|
Publicado: Dom 27 Nov, 2005 9:44 am Asunto: Re: Like |
|
|
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 |
|
 |
juanma Cmdr

Registrado: 17 Nov 2005Mensajes: 127Ubicación: Almeria - España
|
Publicado: Lun 28 Nov, 2005 1:32 pm Asunto: |
|
|
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 |
|
 |
JesúsGandia Master


Registrado: 17 Jul 2004Mensajes: 403Ubicación: Gandia, Valencia
|
Publicado: Mar 29 Nov, 2005 1:12 pm Asunto: |
|
|
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 |
|
 |
juanma Cmdr

Registrado: 17 Nov 2005Mensajes: 127Ubicación: Almeria - España
|
Publicado: Mie 30 Nov, 2005 12:24 pm Asunto: |
|
|
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 |
|
 |
JesúsGandia Master


Registrado: 17 Jul 2004Mensajes: 403Ubicación: Gandia, Valencia
|
Publicado: Jue 01 Dic, 2005 1:04 am Asunto: |
|
|
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 |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Jue 01 Dic, 2005 8:55 pm Asunto: |
|
|
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 |
|
 |
JesúsGandia Master


Registrado: 17 Jul 2004Mensajes: 403Ubicación: Gandia, Valencia
|
Publicado: Vie 02 Dic, 2005 12:14 am Asunto: |
|
|
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 |
|
 |
juanma Cmdr

Registrado: 17 Nov 2005Mensajes: 127Ubicación: Almeria - España
|
Publicado: Vie 02 Dic, 2005 12:16 pm Asunto: |
|
|
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 , a pesar de que si ejecutaba un Select con el where me mostraba todos.  |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|