| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Jue 24 Abr, 2008 12:09 pm Asunto: Pregunta Tonta para una Query |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Jue 24 Abr, 2008 12:29 pm Asunto: |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Jue 24 Abr, 2008 1:09 pm Asunto: |
|
|
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 |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Jue 24 Abr, 2008 1:11 pm Asunto: |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Jue 24 Abr, 2008 2:59 pm Asunto: |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Jue 24 Abr, 2008 3:41 pm Asunto: |
|
|
| 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 |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Jue 24 Abr, 2008 4:02 pm Asunto: |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Jue 24 Abr, 2008 5:23 pm Asunto: |
|
|
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 |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Jue 24 Abr, 2008 5:27 pm Asunto: |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
|