Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Campo tipo AutoInc
Message
General information
Forum:
Visual FoxPro
Category:
Databases,Tables, Views, Indexing and SQL syntax
Miscellaneous
Thread ID:
00813445
Message ID:
00813470
Views:
8
>Olá PCC,
>
>Eu fiz alguns testes e parece funcionar certinho... Fiquei com 2 dúvidas:
>
>1) Será que em rede, na pauleira mesmo, esse troço não falha?

Isto eu também gostaria de saber.
>
>2) Se der paw no contador, como poderemos ajustar o "próximo valor" sem ter que usar o Modify Structure? (Não achei nada a respeito).

Com o comando Alter Table funciona perfeito. Inclusive já fiz alguns testes. Pego o valor atual com
 =Afields(laCampos)  
E altero o Próximo valor com :
ALTER TABLE MinhaTabela ALTER COLUMN MeuCampoAutoInc I NOT NULL AUTOINC NEXTVALUE nProximoValorDesejado STEP 1
O Maior problema que estou tendo agora é o seguinte :

Imagine que eu tenho duas tabelas uma para Dados da Nota( nota.dbf ) e outra para Produtos da Nota ( nota_prd.dbf ) a chave primaria na nota.dbf é id_nota , e que chave estrangeira no nota_prd.dbf :
Estrutura do Nota.dbf

id_nota  I    (autoinc)       Chave Primária
numero   C    10
data     D     8
.... outros campos ....


Estrutura do nota_prd.dbf

id_nota_prd    I  (AutoInc)    Chave Primária
id_nota        I               Chave Estrangeira
... outros campos de interesse diverso .....
Veja que eu tenho uma integridade Referencial que não permite que eu insira um campo no nota_prd.dbf, que não tenha um equivalente no nota.dbf.

Então para inserir um registro no nota_prd, tenho antes que recuperar o valor do id_nota. Consigo fazer isto usando append blank, mas gostaria de fazer isto usando INSERT SQL

Veja como ficou o código atual :
USE nota     IN 0 SHARED
USE nota_prd IN 0 SHARED

SET multilocks on

IF CursorSetProp("Buffering",5,"nota")
   IF !CursorSetProp("Buffering",5,"nota_prd")
       * tratamento de erro por não bufferizar a tabela *
   ENDIF
ENDIF

BEGIN TRANSACTION

    *****  gostaria de trocar este codigo por um INSERT SQL. Como Fazer ?
    *****  O grande problema e a recuperação do valor de id_nota. Pois se fizer com INSERT SQL,teria que executar um SELECT SQL, 
    *****  para recuperar este valor.
 
    SELECT nota        
    APPEND BLANK 
    REPL numero WITH lcNumero
    *** REPL em todos os campos com os devidos valores
    lnId_nota = id_nota       && pego o valor da chave primaria para alimentar a nota_prd
    lGravou = TableUpdate(.T.,.T.,"nota")
    *********    


    IF lGravou
       FOR i=1 TO 10  && com este exemplo tenho 10 itens na nota
           INSERT INTO nota_prd(id_nota,<lista de outros campos>) VALUES (lnId_nota,<outros campos>)
           lGravou = TableUpdate(.T.,.T.,"nota_prd")
           IF !lGravou
              EXIT      && no caso de gerar um erro sai do loop
          ENDFOR
       ENDFOR
    ENDIF

IF lGravou
   END TRANSACTION
ELSE
   ROLLBACK
   TableRevert(.T.,"nota")
   TableRevert(.T.,"nota_prd")
   Wait Windo [Mensagem para o usuario alertando o erro na gravacao]
ENDIF
>
>[]s!
Paulo Cesar Carneiro
desenvolvimento@controplan.com.br


"My God, what have we done?"
-- Capt. Robert Lewis, co-pilot of the Enola Gay, recalling the moment the atomic bomb exploded over Hiroshima

At 8:15 a.m. on August 6 1945
Previous
Reply
Map
View

Click here to load this message in the networking platform