SQL Generico com Oleraviant
Pessoal este codigo abaixo e um insert generio que passo olevariant e ele pega os dados, cria a sql de insercao e alimenta os parametros ..So que quando ele vai alimentar os paramentros ele da um DELPHI EXCEPTION e sai do loop...Ja olhei se ele tava mento criando os paramentros e esta criando certo ...entao gostaria de saber se alguem tem alguma ideia
Obrigado
Michel.
# o delphi sai da rotina quando chega nesta parte
Sql.ParamByName(campo).AsInteger := cds.Fields[i].AsInteger;
Alguma Sugestao por favor ?
function TClasseBaseServer.doInternalInsert(Data: TDataTransport;
Table: string): integer;
var
Sql : TSQLQuery;
Separador,campo : string;
i : Integer;
Field : TFieldType;
CDS : TClientDataSet;
begin
try
try
//Result := 0;
CDS := TClientDataSet.Create(nil);
CDS.Close;
CDS.Data := Data;
CDS.Open;
Sql := TSQLQuery.Create(nil);
Sql.SQL.Clear;
// comeca a montar a sql de insert
Sql.SQL.Add(´Insert into ´);
sql.SQL.Add(trim(Table));
sql.SQL.Add(´(´);
Separador := ´´;
// pega os campos
for I := 0 to CDS.FieldCount - 1 do
begin
Sql.SQL.Add(Separador + CDS.Fields[i].FieldName);
Separador := ´,´;
end;
sql.SQL.Add(´)´);
sql.SQL.Add(´Values´);
sql.SQL.Add(´(´);
Separador := ´´;
// adiciona os parametros
for I := 0 to CDS.FieldCount - 1 do
begin
Sql.SQL.Add(Separador + ´ :´ + CDS.Fields[i].FieldName);
Separador := ´,´;
end;
sql.SQL.Add(´)´);
// seta os patametros
sql.ParamCheck := true;
for I := 0 to CDS.FieldCount - 1 do
begin
campo := CDS.Fields[i].FieldName;
Field := CDS.Fields[i].DataType;
case field of
ftString : begin
Sql.ParamByName(QuotedStr(campo)).AsString :=
cds.Fields[i].AsString;
end;
ftInteger: begin
Sql.ParamByName(QuotedStr(campo)).AsInteger :=
cds.Fields[i].AsInteger;
end;
ftFloat : begin
Sql.ParamByName(QuotedStr(campo)).AsFloat :=
cds.Fields[i].AsFloat;
end;
ftDate : begin
Sql.ParamByName(QuotedStr(campo)).AsString :=
formatdatetime(´dd/mm/yy´, cds.Fields[i].AsDateTime);
end;
end;
campo := ´´;
end;
finally
Result := Sql.ExecSQL();
FreeAndNil(CDS);
FreeAndNil(Sql);
end;
except
on e : Exception do
begin
FreeAndNil(CDS);
FreeAndNil(Sql);
raise Exception.Create(e.Message);
end;
end;
end
Obrigado
Michel.
# o delphi sai da rotina quando chega nesta parte
Sql.ParamByName(campo).AsInteger := cds.Fields[i].AsInteger;
Alguma Sugestao por favor ?
function TClasseBaseServer.doInternalInsert(Data: TDataTransport;
Table: string): integer;
var
Sql : TSQLQuery;
Separador,campo : string;
i : Integer;
Field : TFieldType;
CDS : TClientDataSet;
begin
try
try
//Result := 0;
CDS := TClientDataSet.Create(nil);
CDS.Close;
CDS.Data := Data;
CDS.Open;
Sql := TSQLQuery.Create(nil);
Sql.SQL.Clear;
// comeca a montar a sql de insert
Sql.SQL.Add(´Insert into ´);
sql.SQL.Add(trim(Table));
sql.SQL.Add(´(´);
Separador := ´´;
// pega os campos
for I := 0 to CDS.FieldCount - 1 do
begin
Sql.SQL.Add(Separador + CDS.Fields[i].FieldName);
Separador := ´,´;
end;
sql.SQL.Add(´)´);
sql.SQL.Add(´Values´);
sql.SQL.Add(´(´);
Separador := ´´;
// adiciona os parametros
for I := 0 to CDS.FieldCount - 1 do
begin
Sql.SQL.Add(Separador + ´ :´ + CDS.Fields[i].FieldName);
Separador := ´,´;
end;
sql.SQL.Add(´)´);
// seta os patametros
sql.ParamCheck := true;
for I := 0 to CDS.FieldCount - 1 do
begin
campo := CDS.Fields[i].FieldName;
Field := CDS.Fields[i].DataType;
case field of
ftString : begin
Sql.ParamByName(QuotedStr(campo)).AsString :=
cds.Fields[i].AsString;
end;
ftInteger: begin
Sql.ParamByName(QuotedStr(campo)).AsInteger :=
cds.Fields[i].AsInteger;
end;
ftFloat : begin
Sql.ParamByName(QuotedStr(campo)).AsFloat :=
cds.Fields[i].AsFloat;
end;
ftDate : begin
Sql.ParamByName(QuotedStr(campo)).AsString :=
formatdatetime(´dd/mm/yy´, cds.Fields[i].AsDateTime);
end;
end;
campo := ´´;
end;
finally
Result := Sql.ExecSQL();
FreeAndNil(CDS);
FreeAndNil(Sql);
end;
except
on e : Exception do
begin
FreeAndNil(CDS);
FreeAndNil(Sql);
raise Exception.Create(e.Message);
end;
end;
end
Mortarello
Curtidas 0
Respostas
Afarias
08/10/2009
vc depurou? qual exatamente a mensagem de erro e em q linha ocorre?
T+
T+
GOSTEI 0