Fórum Chave primária..... #213123
11/02/2004
0
tenho uma tabela em paradox one no CAMPO NOME...coloquei uma chave primária...
só que presciso duplicar alguns registros ... tipo um nome,.... maria das graças,.. quantas Marias exitem... só que salvo o registro com nome duplicado me dá um erro de chave primária...
como resolver isso, sem ter quer que desabilitar a chave prim....?
GCM...
Gigatel
Curtir tópico
+ 0Posts
11/02/2004
Vinicius2k
sinto desanimá-lo, mas é impossível... o sentido de uma primarykey ou qualquer outro indice unique é travar a duplicação de registros...
na verdade existe um erro de projeto do seu banco de dados e melhor vc corrigí-lo agora para que não se agrave..
T+
Gostei + 0
11/02/2004
Gigatel
vejam o código e vê se dá para adptar sem a chave....
procedure T_FormContas.DBComboBox1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
l:Integer;
begin
if (key=VK_BACK) or (key=VK_DELETE) or (key=VK_LEFT) or (key=VK_RIGHT)
or (KEY=vk_home) or (key=VK_END) or (key=VK_SHIFT) or (key=VK_TAB) then exit;
ComboBox1.DroppedDown:=true;
l:=Length(Combobox1.text);
Table1.FindNearEst([combobox1.Text]);
if Copy(Table1.Fieldbyname(´Nome´).asString,1,L)=
Copy(ComboBox1.Text,1,L) then begin
Combobox1.Text:= Table1.Fieldbyname(´nome´).asString;
Combobox1.SelStart:=l;
ComboBox1.SelLength:=Length(ComboBox1.Text)-l;
end;
end;
GCM
Gostei + 0
11/02/2004
Gigatel
´ Table1: Indice corrente não ativo ´...
vou ter que tirar esta chave de qualquer jeito....
Gostei + 0
11/02/2004
Vinicius2k
troca o método FindNearest pelo método Locate (é um pouco mais lento pq não usa índice), mas resolve o problema da primarykey...
não me recordo se, realmente, o FindNearest está limitado na primarykey, mas tenho a impressão que não... ou seja se vc definir um índice secundário para o campo nome e dizer pra sua table q o índice dela é este, o FindNearest deve funcionar da mesma forma...
para o locate :
Table1.Locate(´NOME_DO_CAMPO´,combobox1.Text,[]);
T+
Gostei + 0
11/02/2004
Gigatel
if Copy(Table1.Fieldbyname(´Nome´).asString,1,L)=
Gostei + 0
11/02/2004
Vinicius2k
como assim, problema? vc mudou alguma coisa?
T+
Gostei + 0
11/02/2004
Gigatel
procedure T_FormContas.DBComboBox1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
l:Integer;
begin
if (key=VK_BACK) or (key=VK_DELETE) or (key=VK_LEFT) or (key=VK_RIGHT)
or (KEY=vk_home) or (key=VK_END) or (key=VK_SHIFT) or (key=VK_TAB) then exit;
ComboBox1.DroppedDown:=true;
l:=Length(Combobox1.text);
[url]Table1.FindNearEst([combobox1.Text]); [/url]
if Copy(Table1.Fieldbyname(´Nome´).asString,1,L)=
Copy(ComboBox1.Text,1,L) then begin
Combobox1.Text:= Table1.Fieldbyname(´nome´).asString;
Combobox1.SelStart:=l;
ComboBox1.SelLength:=Length(ComboBox1.Text)-l;
end;
end;
Mas não funcinol... dá o memo erro citado acima.....
Gostei + 0
11/02/2004
Gigatel
desculpe errei
é aki
substituí este:
Table1.FindNearEst([combobox1.Text]);
por aquele que tú me endicou...
valeuuu
Gostei + 0
11/02/2004
Vinicius2k
desculpe... se a busca é parcial, vc precisa do parametro LoPartialKey para o método Locate... assim :
Table1.Locate(´NOME´,combobox1.Text,[LoPartialKey]);
só q não entendi uma coisa : vc não está usando a rotina no OnKeyUp errado?
pelo q vc postou ela está no OnKeyUP do DBComboBox1, mas o correto não seria no do ComboBox1 ?
T+
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)