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 

Pregunta Tonta para una Query

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Pregunta Tonta para una Query Responder citando

Hola a todos,

Seguro que es una chorrada pero es que me da error y no soy capaz,

Es facil de explicar, tengo un Memo donde quiero escribir las sentencias SQL que quiera, unas veces un Select simple y otras cosas mas complicadas, una vez acabo lo paso a una Query para ejecutarlo, pero me da error, el problema es que cuando paso el Memo a la Query lo pasa con \N \R cosas asi, lo de los retornos de carro y todo eso y claro la Query no se entera y da error.

Lo he probado de mil formas pero no hay manera:

************************************************
QRQuery->SQL->Add(Memo1->Text);
************************************************
QRQuery->SQL->Add(Memo1->Text.c_str());
************************************************
for(int n=0;n<Memo1>Lines->Count;n++)
QRQuery->SQL->Add(Memo1->Lines->Strings[n]);
************************************************

Como podria hacer esto? es que no me sale de ninguna forma.

Un abrazo.

Carlos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Prueba esto:
Código:
QRQuery->SQL->Text = Memo1->Text;

_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Nada,

El mismo problema, le mete \r\n y no se entera.

No puede ser tan dificil no? le estoy dando mil vueltas y no hay forma.

Un abrazo.

Carlos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Que te ponga los \r\n no debería ser problema; al fin y al cabo cuando pones SQL->Add() están metiendo también los retornos de carro. Prueba esto otro:
Código:
Query->SQL->Text = StringReplace(Memo1->Text, "\r\n", " ", TReplaceFlags() << rfReplaceAll);

(Entre las comillas solas hay un espacio en blanco)
Antes de "meter" el memo en el query, le quitamos los retornos de carro (\r) y saltos de línea (\n).
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Angel,

Me da la impresion de que los tiros no van por el \r\n resulta que si le meto algo mas sencillo si funciona, mira te pongo un ejemplo de lo que da error:

**************************************
USE master
go
CREATE DATABASE Tarifas
go
USE Tarifas
/*
* TABLE: Areas
*/

CREATE TABLE Areas(
idArea int IDENTITY(1,1),
Descripcion varchar(100) NULL,
CONSTRAINT PK15 PRIMARY KEY NONCLUSTERED (idArea)
)
*****************************************

Puede ser por lo "GO" o algo asi?

Un abrazo.

Carlos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

¿Con que base de datos estás trabajando? Porque eso del go no me suena de nada.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Con SQL Server,

Es que es muy raro, hay una serie de comandos que coge y otros no, quizas es que no se puede meter mas de una sentencia en una cadena SQL?

No entiendo nada.

Un abrazo.

Carlos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Carlos J. Fernandez escribió:
Es que es muy raro, hay una serie de comandos que coge y otros no, quizas es que no se puede meter mas de una sentencia en una cadena SQL?

SQL Server no he usado nunca, y en tablas Paradox o Firebird efectivamente mando ejecutar una sentencia de cada vez; es decir:
Código:
QRQuery.->Close();
QRQuery->SQl->Add("USE master");
QRQuery-ExecSQL();
QRQuery->Close();
QRQuery->SQl->Add("go");
QRQuery-ExecSQL();
QRQuery->Close();
QRQuery->SQl->Add("CREATE DATABASE Tarifas");
QRQuery-ExecSQL();
QRQuery->Close();
QRQuery->SQl->Add("go");
QRQuery-ExecSQL();
QRQuery->Close();
QRQuery->SQl->Add("USE Tarifas");
QRQuery-ExecSQL();
QRQuery->Close();

_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Si, parece que debe ser asi.

No hay formas de ejecutar scrips completos?

Voy a probar como me dices a ver que pasa.

Un abrazo.

Carlos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Dado que el script lo tiene smetido en un TMemo, ¿por qué no montas un bucle?
Código:
for (int nLinea = 0; nLinea <Memo1>Lines->Count; nLinea ++)
{
     QRQuery->Close();
     QRQuery->SQL->Add(Memo1->Lines->Strings[nLinea]);
     try
     {
          QRQuery->ExecSQL();
     }
     catch (...)
     {
     }
}

Sólo tienes que tener cuidado de cada query completo esté en un línea o usar un carácter de control raro y verificar cuando llega. Por ejemplo
Código:
for (int nLinea = 0; nLinea <Memo1>Lines->Count; nLinea ++)
{
     QRQuery->Close();
     QRQuery->SQL->Add(Memo1->Lines->Strings[nLinea]);
     if (Memo1->Lines->Strings[nLinea].Pos("þ") == 0)    // þ » CHAR(231)
          continue;
     else
          QRQuery->SQL->Text = QRQuery->SQL->Text.SubString(1, QRQuery->SQL->Text.Pos("þ") - 1);

     try
     {
          QRQuery->ExecSQL();
     }
     catch (...)
     {
     }
}

_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Si, ya lo habia pensando,

El problema es que la QUERY puede venir de cualquier sitio, no tengo por que hacerla yo, con lo cual como meto ese caracter raro?

El problema es identificar donde acaba cada sentencia.

Un abrazo.

Carlos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

No la metes tú, pero ¿controlas de dónde o cómo llega? En donde lo hagas, le añades el carácter de control.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
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.