PDA

Ver la Versión Completa : Query con sentencia GO


nachoalbano
25-05-2007, 23:47:01
Que tal a todos, estoy tratando de cerrar un sistema para entregar y me encuentro con este problema con el sql. Antes que nada les comento que es lo que estoy usando. Delphi 7 con SQLServer 2000, conexion por ado y componentes TADOQuery (crearBD).
Estoy ejecutando este código



crearBD.Close;
crearBD.SQL.Clear;
crearBD.SQL.LoadFromFile(PathAplicacion+'\bd.sql');
crearBD.ExecSQL;




pero el archivo bd.sql presenta sentencias GO para delimitar creates entre sp y otros objetos... y es justo ahi donde me tira un error de sintaxis. La misma query en el query analizer anda 10 puntos, pero desde el delphi me tira ese error.
si alguien me puede ayudar, se lo agradezco

este es un pedacito del código de SQL



Create table [dbo].[TipoEstadoCivil]
(
[idEstadoCivil] Integer Identity NOT NULL, Constraint [XPKestcivil] UNIQUE ([idEstadoCivil]),
[descripcion] Varchar(30) NULL,
Primary Key ([idEstadoCivil])
)
go
Create table [dbo].[Modulos]
(
[nombre] Nvarchar(80) NOT NULL,
[descripcion] Varchar(80) NULL,
[idPadre] Integer NULL,
[idModulo] Integer NULL,
Primary Key ([nombre])
)
go
Create table [dbo].[TipoActividad]
(
[idActividad] Integer Identity NOT NULL, Constraint [XPKTipoActividad] UNIQUE ([idActividad]),
[descripcion] Varchar(80) NULL, Constraint [UQ__TipoActividad__0425A276] UNIQUE ([descripcion]),
Primary Key ([idActividad])
)
go


Muchas Gracias de antemano

droguerman
26-05-2007, 00:09:33
el go solo lo usan el analizador de consultas o el isql para indicar el final de un bloque de sentencias como archivos separados, mi consejo luego de cargar tu
script haz lo siguiente:

for i:=0 to lineas.count-1 do
begin
if lineas[i]='GO' then lineas[i] := '';
end;


suerte

nachoalbano
26-05-2007, 00:27:41
lo pruebo... pero creo que voy a tener problema con unos create procedure que tengo más abajo en la query... igualmente me diste una idea para resolverlo... pruebo y posteo lo que hice.
gracias man! nos vemos en un rato

nachoalbano
26-05-2007, 18:53:41
Tarde un poco en postear pero aca les tengo la solución que encontré a mi problema, gracias droguerman por la orientación! ;)

acá les dejo el código

AssignFile(script,PathAplicacion+'\bd.sql'); // script es un TextFile
reset(script);
crearBD.SQL.Clear;
while not eof(script) do
begin
readLn(script,lineaScript);
if UpperCase(trim(lineaScript))='GO' then
begin
try
crearBD.ExecSQL;
Except
end;
crearBD.SQL.Clear;
end
else
crearBD.SQL.Add(lineaScript);
end;



adios amigos