[fpc-pascal] How to clear the value of a field in a table using parameters?

Michael Van Canneyt michael at freepascal.org
Thu Aug 29 18:45:14 CEST 2013



On Thu, 29 Aug 2013, silvioprog wrote:

> Hello,
> I'm trying to do something with a dataset, but I think that isn't possible.
> 
> Assuming I have the following table:
> 
> create table users (
> id serial not null primary key,
> email varchar(100),
> nickname varchar(20) not null
> );
> 
> And the following records:
> 
> id | email | nickname
> 1 | user1 at domain.com | user1
> 2 | user2 at domain.com | user2
> 3 | user3 at domain.com | user3
> 
> I want to clear the email of the second user, but using parameters:
> 
> id | email | nickname
> 1 | user1 at domain.com | user1
> 2 | <null> | user2
> 3 | user3 at domain.com | user3
> 
> But when I try this:
> 
>   SQLQuery1.SQL.Add('update users set email = :email');
>   SQLQuery1.SQL.Add('where id = :id');
>   SQLQuery1.ParamByName('id').AsInteger := 2;
>   SQLQuery1.ParamByName('email').Clear;
>   SQLQuery1.ExecSQL;
>   SQLTransaction1.Commit;
> 
> I got:
> 
> "Project project1 raised exception class "EDatabaseError" with message:
> PQConnection1: Unknown fieldtype for parameter "email"."
> 
> I know that I could solve easily via literal string, but I need to use parameters anyway.
> 
> How I solve this?
> 
> Here in Brazil, a friend suggested this:
> 
>   VParam := SQLQuery1.ParamByName('email');
>   VParam.DataType := ftString;
>   VParam.Clear
> 
> Is this the only way? '-'

Yes and no.

In 2.6.2 this is the only way.

There is a fix in SVN that allows you to simply do clear, and it will use then the "any"
field type of postgres (or something similar).

Michael.


More information about the fpc-pascal mailing list