Fórum Chave primária..... #213123

11/02/2004

0

Estou com um problemão...

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

Gigatel

Responder

Posts

11/02/2004

Vinicius2k

Colega,

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+


Responder

Gostei + 0

11/02/2004

Gigatel

Presciso de ajuda ....está chave primária serve para uma cisa bem legal que fiz.. funciona assim... tenho um DBCombobox....modifico este para ficar com aparencia de um edit normal.... quando a pessoa digita o nome de um cliente, este vai auto encrementando o restante do nome.... só que isto funciona somente com chave primária no BD...
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


Responder

Gostei + 0

11/02/2004

Gigatel

Outra coisa a mensagem de erro que dá é este
´ Table1: Indice corrente não ativo ´...
vou ter que tirar esta chave de qualquer jeito....


Responder

Gostei + 0

11/02/2004

Vinicius2k

Tranquilo...
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+


Responder

Gostei + 0

11/02/2004

Gigatel

O problema parece que é aki...

if Copy(Table1.Fieldbyname(´Nome´).asString,1,L)=


Responder

Gostei + 0

11/02/2004

Vinicius2k

O problema parece que é aki... if Copy(Table1.Fieldbyname(´Nome´).asString,1,L)=


como assim, problema? vc mudou alguma coisa?
T+


Responder

Gostei + 0

11/02/2004

Gigatel

Eu nudei como vc me indicou....


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.....


Responder

Gostei + 0

11/02/2004

Gigatel

Eu nudei como vc me indicou.... 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.....



desculpe errei

é aki
substituí este:

Table1.FindNearEst([combobox1.Text]);

por aquele que tú me endicou...


valeuuu


Responder

Gostei + 0

11/02/2004

Vinicius2k

Colega,

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+


Responder

Gostei + 0

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

Aceitar