GARANTIR DESCONTO

Fórum could not convert #277359

15/04/2005

0

Olá, estou tentando gravar meu primeiro registro na tabela, mas o seguinte erro ocorre:
´Could not convert variant of type (Null) into type (String)´

Esta é a parte do meu código que faz a gravação:

procedure TForm1.btnConfirmarClick(Sender: TObject);
begin
Pesquisa.Edit;
if rg1.ItemIndex = -1 then begin
Pesquisa.FieldByName(´Nulo´).AsString := (Pesquisa.FieldByName(´Nulo´).Value + ´1´);
end else begin
Pesquisa.FieldByName(´Fabrica´).AsString := cbFabrica.Text;
case rg1.ItemIndex of
0 : Pesquisa.FieldByName(´Bom´).AsString := Pesquisa.FieldByName(´Bom´).Value + ´1´;
1 : Pesquisa.FieldByName(´Regular´).AsString := Pesquisa.FieldByName(´Regular´).Value + ´1´;
2 : Pesquisa.FieldByName(´Ruim´).AsString := Pesquisa.FieldByName(´Ruim´).Value + ´1´;
end;
end;

é q na verdade ainda não tem nada gravado na tabela, e pego o valor da tabela +1, conforme acima...
Se alguém puder me ajudar...


Daia

Daia

Responder

Posts

15/04/2005

Elciodramos

E ai tudo bem

Não use .Value quando voce estiver concatenando strings use .asString

[b:0bf2b5806a]Pesquisa.FieldByName(´Bom´).Value + ´1´;[/b:0bf2b5806a] Fica Assim
[b:0bf2b5806a]Pesquisa.FieldByName(´Bom´).asString + ´1´;[/b:0bf2b5806a]


Responder

Gostei + 0

15/04/2005

Daia

Olá tudo bem...
mas é que daí não consigo gravar na tabela, pois lá o campo está definido como integer, se eu deixar como string ele não soma ao campo o registro que vou gravar, o que posso fazer??


Responder

Gostei + 0

15/04/2005

Daia

na verdade não estou concatenando, estou pegando o valor que tem na tabela e somando um a ele, é que esse programa é uma pesquisa de satisfacao.
é um questionário com 7 questões, que tem três alternativas: Bom, Regular e Ruim, então só vou somando as respostas...


Responder

Gostei + 0

15/04/2005

Rjun

Use assim :
[b:801238b7df]
Pesquisa.FieldByName(´Ruim´).Value := Pesquisa.FieldByName(´Ruim´).Value + 1;
[/b:801238b7df]


Responder

Gostei + 0

15/04/2005

Daia

fiz outro teste, se na tabela eu definir o campo como Number, e usar .asString na hora de gravar aí funciona, só que na tabela fica gravado como 1.00, queria que ficasse 1, como faço...., você pode me ajudar?


Responder

Gostei + 0

15/04/2005

Daia

Use assim : [b:c2adf18d93] Pesquisa.FieldByName(´Ruim´).Value := Pesquisa.FieldByName(´Ruim´).Value + 1; [/b:c2adf18d93]


Não funciona, porque se eu não tiver nenhum registro na tabela, ele vai dizer que não pode converter nulo em string!!
Aí fiz o seguinte: na tabela eu defini o campo como Number, e usei: Pesquisa.FieldByName(´Ruim´).asString := Pesquisa.FieldByName(´Ruim´).asString + 1; na hora de gravar aí funciona, só que na tabela fica gravado como 1.00, queria que ficasse 1, como faço...., você pode me ajudar?


Responder

Gostei + 0

15/04/2005

Rjun

Bom, se não tem registro na tabela, você deveria ter uma função que inicializasse a tabela, setando 0 para os campos da mesma. Ai você não teria esse problema. Embora você possa fazer esse tipo de operação pegando inteiro, somando com string, isso não é recomendável. Ou então, antes de inserir o registro, teste se ele existe. Se não existir, inclua o mesmo com os valores dos campos zerados.


Responder

Gostei + 0

15/04/2005

Daia

Bom, se não tem registro na tabela, você deveria ter uma função que inicializasse a tabela, setando 0 para os campos da mesma. Ai você não teria esse problema. Embora você possa fazer esse tipo de operação pegando inteiro, somando com string, isso não é recomendável. Ou então, antes de inserir o registro, teste se ele existe. Se não existir, inclua o mesmo com os valores dos campos zerados.


Consegui resolver meu problema, não uso muito paradox, por isso estava com dificuldades, mas aí fussei um pouco mais e lá tem uma propriedade que é Default Value, aí coloquei 0, aí funcionou beleza...
Obrigada pela atenção!!!!!!!!!!!!!


Responder

Gostei + 0

15/04/2005

Daia

mais uma coisa:
Sabe como localizar um registro numa tabela paradox????


Responder

Gostei + 0

15/04/2005

Rjun

Você esta usando TTABLE ?
Olhe os métodos LOCATE e FINDKEY.


Responder

Gostei + 0

15/04/2005

Daia

sim, estou usando TTable...


Responder

Gostei + 0

15/04/2005

Daia

Olá, usei o locate, mas não sei se a sintaxe está certa:
Porque quando é pergunta nova ele não grava um novo registro.
Vc me entende?

if (Pesquisa.Locate(´NumPergunta´, Pesquisa.fieldByName(´NumPergunta´).Value ,[]) = false) then
begin
Pesquisa.Insert;
if rg2.ItemIndex = -1 then begin
Pesquisa.FieldByName(´Nulo´).AsString := Pesquisa.FieldByName(´Nulo´).Value + 1;
Pesquisa.FieldByName(´NumPergunta´).AsString := ´2´;
end else
begin
Pesquisa.FieldByName(´NumPergunta´).AsString := ´2´;
case rg2.ItemIndex of
0 : Pesquisa.FieldByName(´Bom´).AsString := Pesquisa.FieldByName(´Bom´).Value + 1;
1 : Pesquisa.FieldByName(´Regular´).AsString := Pesquisa.FieldByName(´Regular´).Value + 1;
2 : Pesquisa.FieldByName(´Ruim´).AsString := Pesquisa.FieldByName(´Ruim´).Value + 1;
end;
end;
end else
begin
Pesquisa.Edit;
if rg2.ItemIndex = -1 then begin
Pesquisa.FieldByName(´Nulo´).AsString := Pesquisa.FieldByName(´Nulo´).Value + 1;
Pesquisa.FieldByName(´NumPergunta´).AsString := ´2´;
end else
begin
Pesquisa.FieldByName(´NumPergunta´).AsString := ´2´;
case rg2.ItemIndex of
0 : Pesquisa.FieldByName(´Bom´).AsString := Pesquisa.FieldByName(´Bom´).Value + 1;
1 : Pesquisa.FieldByName(´Regular´).AsString := Pesquisa.FieldByName(´Regular´).Value + 1;
2 : Pesquisa.FieldByName(´Ruim´).AsString := Pesquisa.FieldByName(´Ruim´).Value + 1;
end;
end;
end;


Responder

Gostei + 0

15/04/2005

Rjun

if (Pesquisa.Locate(´NumPergunta´, Pesquisa.fieldByName(´NumPergunta´).Value ,[]) = false) then


O campo NumPergunta é inteiro ?

A sintaxe é :

Locate(´NumPergunta´, Variavel, []);

Num post anterior sei, eu coloquei o codigo para por tudo dentro de um FOR.


Responder

Gostei + 0

15/04/2005

Daia

o campo NumPergunta é string...
acho que preciso declarar que o radiogroup(rg1) corresponde a questão 1, porque senão o locate do jeito que eu fiz, não me resolve de nada, não é???


Responder

Gostei + 0

15/04/2005

Rjun

Voce precisa passar no LOCATE qual o valor que você esta procurando na tabela. E você nao esta fazendo isso.

Pelo seu exemplo, teria que ser :

Locate(´NumPergunta´, ´2´, []).

Agora pergunto. Se NumPergunta é um número, pq vc definiu como string ?


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar