
Abrir um Banco de Dados.
CALL "BDABRE" USING <statu> <banco> <nível> <segurança> <modo>
bdabre (<statu>, <banco>, <nível>, <segurança>, <modo>);
|
<statu> |
Área de memória com 5 bytes de comprimento usada para retornar a condição de erro do BDABRE, determina também, algumas configurações de acordo com o valor passado. <statu> pode ser:
Esta opção de inicializar STATU e muito útil, pois o usuário pode aproveitar as mensagens do SGBD nos seus aplicativos ou para depurar os programas. Se a operação de abertura tiver êxito, o BDABRE armazena zero no parâmetro statu. Caso contrário, armazena um valor que corresponde ao erro; consulte a tabela de erros do anexo. |
|
<banco> |
área de memória com 12 a 40 bytes de comprimento contendo o nome do banco de Dados. Este nome deve ter de 1 a 12 caracteres de tamanho, sendo que se ele possuir menos de 12 caracteres, os caracteres restantes devem ser "brancos" (espaço). Se o dicionário do Banco, não estiver no diretório DEFAULT "/usr/tsgbd/tsdic", este parâmetro deverá ter uma área de 40 bytes, com o percurso completo do dicionário. Para o percurso pode-se usar ./e../ ou /direto. |
|
<nível> |
área de memória com 6 bytes de comprimento, contendo a palavra de nível de acesso escolhido pelo usuário, para acesso ao banco. A palavra de nível deve ter de 1 a 6 caracteres e se for menor que 6 caracteres, os restantes devem ser "brancos" (espaço). Caso não tenham sido definidos níveis no esquema, o usuário passa uma palavra de nível de acesso indefinida, a BDABRE assume o nível que seja menor que a menor palavra de nível de acesso, definida no esquema de dados. |
|
<segurança> |
área de memória com 10 bytes, contendo o valor numérico do código de segurança. Deve ser o mesmo que o definido na criação do Banco de Dados. |
|
<modo> |
área de memória de 5 bytes, contendo o código para o modo de operação desejado pelo usuário. Pode ser:
|
Abre um Banco de Dados através da transferência da cópia do dicionário em disco, para uma tabela de execução do SGBD. A seqüência de chamada da BDABRE contém; o nome do Banco de Dados, uma palavra de nível de acesso, um código de segurança e um código de modo de acesso. ABDABRE verifica, junto a tabela de execução, quais itens de dados podem ser acessados pelo usuário, de acordo com a palavra de nível.
Cada arquivo do Banco de Dados é aberto. Se não encontrado, uma mensagem de erro é emitida. Do contrário, o tamanho do registro do arquivo é verificado em relação ao dicionário. Caso haja diferenças, uma mensagem de erro é enviada.
Banco Bex 1 a
Niveis:
2 digit
7 superv
15 gerent
Relacoes:
Nome: arq1 e
Registro: lreg01(1) u03
lreg02 n03
Nome: arqr R
Registro: rreg01 (arqe) u03
rreg02 (0) u03
rreg03 n02
WORKING-STORAGE SECTION.
01 BANCO.
05 STAT-ABRE PIC 9(05) VALUE 12321.
05 NOME-BANCO PIC X (06) VALUE "Bex".
05 NIVEL PIC X (6) VALUE SPACES.
05 SEGUR PIC 9 (10) VALUE 1.
05 MODO PIC 9 (5) VALUE 1.
PROCEDURE DIVISION
INICIO.
CALL "BDABRE" USING STAT-ABRE NOME-BANCO NIVEL SEGUR MODO.
IF STAT-ABRE NOT = ZERO
DISPLAY "NAO ABRIU"
ELSE
DISPLAY "NAO ABRIU".
STOP RUN.
char Statu[6];
char Nome-Banco[13];
char Nivel[7];
char Segur[11];
char Modo[6];
strcpy (Statu, "12321");
strcpy (Nome-Banco, "Bex");
strcpy (Nivel, " ");
strcpy (Segur, "0000000001");
strcpy (Modo,"00001");
bdabre (Statu, Nome-Banco, Nivel, Segur, Modo);
if (memcmp(Statu, "00000",5)!=0)
printf("erro de abertura");
Acessar o primeiro registro para leitura em cadeia.
CALL "BDACHC" USING <statu> <arqu> <chave> <argum> <tamcc>
bdachc (<statu>, <arqui>, <chave>, <argum>, <tamcc>);
<statu>
Área de memória com 5 bytes, usada pela BDACHC, para indicar que foi realizada a leitura (valor de retorno zero) ou para relatar uma condição de erro (retornar o valor de um erro).
<arqui>
Área de memória de 12 bytes contendo o nome de um arquivo. Deve possuir de 1 a 12 caracteres, se for menor que 12 caracteres, os restantes devem ser "brancos" (espaços).
<chave>
Área de memória com 12 bytes, contendo o nome do item chave no arquivo especificado em <arqui>.
<argum>
Área de memória contendo o valor do item chave do arquivo. Seu tamanho depende do tipo e do tamanho do valor do item chave desejado.
<tamac>
Área de memória de 10 bytes, que conterá o tamanho da cadeia encontrada.
A BDACHC recebe o valor de um item chave como parâmetro de entrada e localiza o registro no índice que contém o valor do item chave. A BDACHC coloca na tabela de execução o apontador para o primeiro registro no arquivo, para a cadeia definida pelo valor do item chave. Logo, o BDACHC prepara a tabela de execução, para que a leitura, através das subrotinas, BDPEGC e BDPEGT sejam realizadas.
NOTA: Antes de qualquer leitura em cadeia, o BDACHC deve ser realizado.
Leitura de todos os registros cujo rreg01 e igual a "001"
WORKING-STORAGE SECTION.
01 LECAD
05 STAT-LC PIC 9 (05).
05 NOME-ARQ PIC X (12) VALUE "arqr".
05 CHAVE PIC X (12) VALUR "rreg01".
05 ARGUM PIC X (03) VALUE "001".
05 TAMAC PIC 9 (05).
01 I PIC 9 (5) VALUE 0.
PROCEDURE DIVISION.
CALL "BDACHC" USING STAT-LC NOME-ARQ CHAVE ARGUM TAMAC.
IF STAT-LC NOT = ZERO
DISPLAY "ERRO NA LOCALIZAÇÃO" STOP RUN.
char nome_arq[13], chave [13], argum [04];
char stat_lc[6], tamac[11];
strcpy(nome_arq, "arqrbbb");
strcpy(chave, "rreg01");
strcpy(argum, "001");
bdachc (stat_lc, nome_arq, chave, argum, tamac)
if (memcmp(stat_lc,"00000",5)!=){
printf("erro na localizacao");
exit (1);
}
Acessar o primeiro registro para leitura por prefixo.
CALL "BDACHP" USING <statu> <arqui> <chave> <argum>
bdachp (<statu>, <arqui>, <chave>, <argum>);
|
<statu> |
área de memória com 5 bytes, usada pela BDACHP para indicar que foi realizada a leitura (valor de retorno igual a zero) ou para relatar uma condição de erro (retorna o valor de um erro). |
|
<arqui> |
área de memória de 12 bytes, contendo o nome de um arquivo. Deve possuir de 1 a 12 caracteres ,se for menor que 12 caracteres, os restantes devem ser "brancos" (espaços). |
|
<chave> |
área de memória com 12 bytes, contendo o nome do item chave no arquivo especificado em <arqui>. |
|
<argum> |
área de memória, contendo o valor do prefixo da chave a selecionar. |
A BDACHP prepara a tabela de execução para que a leitura, através das subrotinas BDPEGP e BDPEGV, possam ser realizadas.
NOTA: Antes de qualquer leitura por prefixo a BDACHP deve ser chamada.
Leitura de todos os registros cujo rreg01 tenham o prefixo "1".
WORKING-STORAGE SECTION.
01 LECAD.
05 STAT-LE PIC 9 (05).
05 NOME-ARQ PIC X (12) VALUE "arqr".
05 CHAVE PIC X (12) VALUE "rreg01".
05 ARGUM PIC X (01) VALUE "1".
PROCEDURE DIVISION.
CALL "BDACHP" USING STAT-LE NOME-ARQ CHAVE ARGUM
IF STAT-LE NOT=ZERO
DISPLAY "ERRO" STAT-LE STOP RUN
char nome_arq[13], chave[13], argum[2];
char stat_le[6];
main()
{
bdabre (stat_abre, nome_banco, nivel, seguir, modo);
strcpy (nome_arq, "arqr");
strcpy (chave, "rreg01");
strcpy (argum, "1");
bdachp (stat_le, nome_arq, chave, argum);
if (memcmp(stat_le, "00000",5)!{=0)
printf ("erro");
exit (1);
}
}
Alterar itens não chave.
CALL "BDALTE" USING <arqui>, <itens>, <valos>;
|
<statu> |
área de memória com 5 bytes, usada pela BDALTE para retornar o valor zero, quando ocorrer sucesso na operação ou retornar um código de erro. |
|
<arqui> |
área de memória com 12 bytes, contendo o nome do arquivo. Deve ter de 1 a 12 caracteres. Se for menor que 12 caracteres, os restantes devem ser "brancos" (espaços). |
|
<itens> |
área de memória grande o suficiente para conter nos 5 primeiros bytes, a quantidade de itens a serem alterados e o restante da área deverá ser completada com os nomes dos itens do arquivo mencionado em <arqui> que serão alterados. Cada nome de item ocupa 12 bytes. |
|
<valos> |
área de memória, contendo valores a serem colocados nos itens de dados especificados em itens. Estes valores são concatenados na área. Cada valor deve ocupar todo o espaço definido para o item de dado no esquema do Banco. |
A BDALTE é utilizada para alterar os valores de itens não chave, dentro de um registro num arquivo.
Uma vez chamada a BDALTE, a rotina lê o último registro acessado pela BDPEG* e modifica os itens de dados no registro, a partir de dados contidos em uma área especificada pelo usuário na chamada da BDALTE, e regrava o registro modificado.
Os itens de dados, a serem modificados no registro, são especificados pelo nome do item. Para descobrir estes nomes, antes de chamar a BDALTE, veja o esquema de definição do Banco. Alem disso, cada item de dados no arquivo, tem associado a ele, um nível de leitura e gravação. Qualquer item de dado especificado para ser atualizado pela BDALTE, deve ter um nível de gravação igual ou menor que o nível especificado pelo usuário, quando o Banco foi aberto (usando a rotina BDABRE). Se o usuário especifica uma atualização de item de dado cujo nível de gravação seja superior ao nível de usuário, não será efetuada a atualização para nenhum item no registro e a BDALTE carrega um código de erro para a área de status.
Observações:
WORKING-STORAGE SECTION.
01 ALTCAD.
05 STAT-ALT PIC 9 (05).
05 ARQUI PIC X (12) VALUE "ARQU".
05 ITENS.
10 QUANT PIC 9 (05) VALUE 1.
10 NOME-ITEM PIC X (12) VALUE "rreg03".
05 TRAB.
10 WREG03 PIC 9 (02) VALUE 12.
PROCEDURE DIVISION.
INICIO.
* Abertura do Banco
CALL "BDPEGM" USING STAT-ABRE NOME-BANCO NIVELv SEGUR MODO.
* Leitura do registro
CALL "BDABRE" USING STAT-PGM NOME-ARQ ITEN-PGM VALOS VALCHA.
* Alteração do registro
CALL "BDALTE" USING STAT-ALT ARQUI ITENS TRAB.
IF STAT-ALT NOT=ZERO
DISPLAY "ERRO" STAT-ALT STOP RUN.
char quant[6];
char nome_item[13];
char wreg03[3];
char stat_alt[6];
char arqui[13];
main()
{
/* abertura do banco */
bdabre (stat_abre, nome_banco, nivel, seguir, modo);
/*leitura do registro */
bdpegm (stat_pegm, nome_arq, item_pgm, valos, valcha);
/* alteracao do registro */
strcpy (arqui, "arqu");
strcpy (quant,"00001");
strcpy (nome_item,"rreg03");
strcpy (wreg03,"12");
bdalte (stat_alt, arqui, quant, wreg03);
Bloquear um Banco de Dados.
CALL "BDBLOQ" USING <statu>
bdbloq (<statu>);
|
<statu> |
área de 5 bytes,, usada pelo BDBLOQ para indicar a realização do Bloqueio. Se o bloqueio foi executado, esta área conterá zero. Caso haja uma condição de erro, conterá um código de erro. |
A BDBLOQ fornece ao usuário a possibilidade de manter temporariamente, o uso exclusivo de um Banco de Dados, desde que o usuário tenha aberto o Banco com o modo de Abertura compartilhado para gravação (MODOA=2).
Torna-se necessário bloquear um Banco de Dados quando existe a possibilidade de mais de um usuário vir a acessar o mesmo Banco de Dados a fim de processar inclusões, deleções ou alterações.
Se um determinado usuário, na sua sessão, tenta abrir um Banco de Dados com o modo de acesso compartilhado (MODOA=2), só será permitida a abertura se o modo de acesso registrado no dicionário do Banco em disco for 2. Tendo sido aberto o Banco, o usuário deverá chamar a rotina BDBLOQ antes de fazer uso das rotinas BDINCL, BDEXCL ou BDTROC é recomendado que logo após tenha sido feita uma inclusão ou delação, que o usuário desbloqueie o banco de dados (Vide rotina BDDESB).
NOTA: - O banco de dados não deverá ser bloqueado por longos períodos pois outros usuários podem estar aguardando o uso do banco.
Se no dicionário foi especificada a opção ARQRECUP a chamada da BDBLOQ define o início de uma transação, para recuperação do Banco de Dados (em caso de queda de forca) pelo utilitário BDRECU.
* Alteracao do arquivo arqr do Banco Bex.
WORKING-STORAGE SECTION.
01 STAT-BLQ PIC 9 (05) VALUE ZEROS.
PROCEDURE DIVISION.
INICIO.
* bloqueio do Banco
CALL "BDBLOQ" USING STAT-BLQ.
IF stat-blq NOT=zerosc
DISPLAY "ERRO" STOP RUN
* Alteracao
CALL "BDTROC" USING Stat-troc arq-troc itens trab
* desbloqueio do Banco
CALL "BDDESB" USING stat-dbq
int stat-blq;
main ()
/*bloqueio do Banco
stat-blq=0
bdbloq (stat-blq);
if (stat-blq!=0)
{printf("erro");
exit (1);
}
/* Alteracao
bdtroc(trocad.stat-troc, trocad.arq-troc, trocad.itens, trocad.trab
bddesb (stat-dbq);
Desbloquear Banco de Dados
CALL "BDDESB" USING <statu>.
bddesb (<statu>);
|
<statu> |
área de memória com 5 bytes, usada pelo BDDESB para indicar a realização de um desbloqueio. Se o desbloqueio for executado com êxito, esta área conterá zero. Caso contrário, o <statu> conterá um valor diferente de zero. |
O BDDESB permite que o usuário desbloqueie um Banco de Dados que tenha sido bloqueado.
Observações:
Se no dicionário for especificada a opção ARQREWP a chamada da BDDESB define o fim de uma transação do Banco, quando houver necessidade (em caso de uma queda de luz, por exemplo).
* Alteracao do arquivo arqr do Banco Bex.
Working-Storage Section
01 stat-dbq PIC 9 (05) Value zeros;
PROCEDURE DIVISION
INICIO
* Bloqueio do Banco
CALL "BDBLOQ" USING stat-blq
* Alteração
CALL "BDTROC" USING stat-troc arq-troc itens trab
*desbloqueio do Banco
CALL "BDDESB" USING stat-dbq
IF stat-dbq NOT= zeros
DISPLAY "ERRO" STOP RUN
int stat-dbq;
main()
/*Bloqueio do Banco*/
bdbloq (stat-blq);
-*Alteracao*/
bdtroc(trocad.stat-troc,trocad.arq troc,trocad.itens,trocad.trab
/*desbloqueio do Banco*/
bddesb (stat-dbq);
if(stat dbq!=0)
printf("erro");
exit(1);
}
Desfazer transação corrente.
CALL "BDDESF" USING <statu>
bddesf (<statu>);
|
<statu> |
área de 5 bytes,, que retorna zero indicando o sucesso na execução da subrotina, ou retorna um código zero. |
A rotina BDDESF, tem por objetivo desfazer a transação que está sendo executada porque foi detectado algum erro. Deve ser especificada após um BDBLOQ e antes do BDDESB que definem a transação.
Selecionar chave de ordem para leitura seqüencial.
CALL "BDESCH" USING <statu> <arqui> <chave>.
bdesch (<statu>, <arqui>, <chave>);
|
<statu> |
área de 5 bytes,, que retorna zero indicando o sucesso na execução da subrotina, ou retorna um código de erro. |
|
<arqui> |
área de memória com 12 bytes, contendo o nome do arquivo. Deve ter de 1a 12 caracteres. Se for menor que 12 caracteres, os restantes devem ser "brancos" (espaços). |
|
<chave> |
área de memória com 12 bytes contendo o nome de um campo chave. |
A subrotina BDESCH permite que se faça uma escolha entre as chaves disponíveis no arquivo, para ser a chave que determinará a ordem em uma leitura seqüencial. Assim, ao invés dos valores virem ordenados pela primeira chave, serão ordenados pela chave especificada no parâmetro <chave>.
Esvaziar arquivo.
CALL "BDESVA" USING <statu> <arqui>.
bdesva (<statu>, <arqui>);
|
<statu> |
área de 5 bytes,, que retorna zero indicando o sucesso na execução da subrotina, ou retorna um código de erro. |
|
<arqui> |
área de memória com 12 bytes, contendo o nome do arquivo. Deve ter de 1 a 12 caracteres, Se for menor que 12 caracteres, os restantes devem ser "brancos" (espaços). |
A subrotina BDESVA permite que um arquivo seja esvaziado.
Um arquivo só poderá ser esvaziado se não possuir valores de itens que contenham ligações com outros arquivos.
Deletar registro de arquivo.
CALL "BDEXCL" USING <statu> <arqui>.
bdexcl (<statu>, <arqui>;
|
<statu> |
área de 5 bytes, que retorna zero indicando o sucesso na execução da subrotina, ou retorna um código de erro. |
|
<arqui> |
área de memória com 12 bytes, contendo o nome do arquivo. Deve ter de 1 a 12 caracteres. Se for menor que 12 caracteres, os restantes devem ser "brancos" (espaços). |
A BDEXCL remove registros de um arquivo entidade ou de um arquivo relacionamento, especificado na chamada da BDEXCL.O registro removido é o último registro acessado por uma chamada anterior a BDPEG*.e .Qualquer registro, num arquivo relacionamento, pode ser removido sem restrições.
Para deletar um registro de um arquivo entidade,o usuário deve primeiro deletar todos os registros de arquivos relacionamento, cujos itens estejam associados explicitamente, o mesmo deve ser observado para os arquivos entidade que contiverem registros onde hajam itens de associação deste arquivo, logados explicitamente.
Para usar a BDESXCL, deve-se abrir o banco de dados com MODOA=2 ou 3; onde MODOA e o modo de acesso definido na chamada da BDABRE. Se MODOA=2, o banco de dados deve ser dinamicamente bloqueado usando-se BDBLOQ antes de usar a BDEXCL e desbloqueado com a BDDESB depois de completada a tarefa.
Fechar Banco de Dados.
CALL "BDFECH" USING <statu>
bdfech (<statu>);
|
<statu> |
área com 5 bytes, usada pela BDFECH para indicar realização do fechamento. Se o Banco foi fechado com êxito o valor retornado pelo<statu>e zero, do contrário, um valor diferente que equivale ao erro. |
O BDFECH fecha os arquivos do Banco, libera todas as alocações solicitadas pelo Banco na sessão em que o Banco foi aberto e altera o dicionário em disco do respectivo Banco, decrementando o número de vezes que o Banco foi aberto, zerando o modo de acesso caso o número de aberturas seja zero.
PROCEDURE DIVISION.
CALL "BDABRE" USING STAT-ABRE NOME-BANCO NIVEL SEGUR MODO.
CALL "BDFECH" USING STAT-FECH.
IF STAT-FECH NOT=ZERO
DISPLAY "OCORREU ERRO NO FECHAMENTO DO BANCO"
ELSE DISPLAY "FECHAMENTO OK".
main()
{
bdabre (stat-abre, nome-banco, nivel, seguir, modo);
bdfech (stat-fech);
if (memcmp (stat-fech, "00000",5)!=0)
printf ("ocorreu erro");
else printf ("fechamento ok!");
}
Incluir registros.
CALL "BDINCL" USING <STATU> <ARQUI> <ITENS> <VALOS>.
bdincl (<statu>, <arqui>, <itens>, <valos>);
|
<statu> |
área de memória de 5 bytes, usada pelo BDINCL para indicar tarefa completada ou condições de erro. Se BDINCL grava um registro com êxito, no arquivo desejado, ela armazena zero em <statu>. Se o registro não foi armazenado, por qualquer condição de erro, a BDINCL retorna o código de erro apropriado em <statu>. |
|
<arqui> |
área de memória com 12 bytes, contendo o nome de um arquivo entidade ou relacionamento. Deve ter de 1 a 12 caracteres e se for menor que 12 caracteres, os restantes devem ser "brancos". |
|
<itens> |
área de memória grande o suficiente para conter, nos 5 primeiros bytes, a quantidade de itens a serem gravadas e o restante da área deverá ser completada com os nomes dos itens do arquivo mencionado em <arqui> cada nome em 12 bytes. |
|
<valos> |
área de memória contendo valores a serem colocados nos itens de dados especificados em <itens>. Estes valores são concatenados nesta área. Cada área deve ocupar todo espaço definido para o item de dado no esquema de dados. |
A BDINCL inclui novos registros em arquivos entidade ou relacionamento.
Os usuários da rotina BDINCL devem abrir o Banco de Dados usando a BDABRE com modo de acesso 2 ou 3. Se o usuário abrir o Banco, com modo de acesso 2, ele deve dinamicamente bloquear o Banco usando a BDBLOQ antes de usar a BDINCL e desbloquea-lo usando a BDDESB após completar a tarefa.
Quando se inclui registros usando a BDINCL, deve-se especificar o número de itens no registro que irão conter valores. Este número pode ser menor que o número de itens no registro.
Juntamente com o número de itens no registro que recebem valores, o usuário também fornece os nomes dos itens de dados e estes serão concatenados e guardados numa área. O usuário fornece os valores na ordem em que os nomes dos itens aparecem na chamada da BDINCL. Os valores fornecidos na área devem ter o mesmo tamanho dos itens definidos no esquema de dados. Valores de itens chave dos itens definidos no esquema de dados. Valores de itens chave devem ser sempre fornecidos. Qualquer item do registro não fornecido pelo usuário com um valor será preenchido com zeros binários.
Quando a BDINCL é chamada para inserir um registro em um arquivo e este registro contiver itens de associação ligados explicitamente, é verificado se cada valor do item chave estrangeira a ser incluído tem correspondência com o valor do item chave relativo ao arquivo cujo nome foi explicitado na relação. Caso não exista o item chave, ou seja, não exista o valor correspondente, no arquivo associado, a BDINCL retorna um código de erro.
Caso a BDINCL seja chamada para inserir um registro em um arquivo e este registro contiver itens de associação ligados de forma não explicita, a BDINCL não fará nenhuma verificação quanto a integridade referencial e a inclusão será efetuada sem qualquer crítica.
Incluir registros no meio da cadeia.
CALL "BDINCA" USING <statu> <arqui> <itens> <valos>
bdinca (<statu>, <arqui>, <item>, <valos>);
|
<statu> |
área de memória de 5 bytes, usada pelo BDINCA para indicar tarefa completada ou condições de erro. Se BDINCA grava um registro com êxito no arquivo desejado, ela armazena zero em <statu>. Se o registro não foi armazenado, por qualquer condição de erro, a BDINCA retorna o código de erro apropriado em <statu>. |
|
<arqui> |
área de memória com 12 bytes, contendo o nome de um arquivo entidade ou relacionamento. Deve ter de 1 a 12 caracteres e se for menor que 12 caracteres, os restantes devem ser "brancos". |
|
<itens> |
área de memória grande o suficiente para conter nos 5 primeiros bytes, a quantidade de itens a serem gravadas e o restante da área, deverá ser completada com os nomes dos itens do arquivo mencionado em <arqui> cada nome em 12 bytes. |
|
<valos> |
área de memória contendo valores a serem colocados nos itens de dados especificados em <itens>. Estes valores são concatenados nesta área. Cada área deve ocupar todo espaço definido para o item de dado no esquema de dados. |
Para incluir um registro no meio de uma cadeia, deve ser chamada a subrotina BDINCA. Antes da BDINCA ser chamada a BDPEGC (leitura em cadeia), deve ser usada para ler o registro antes do qual será incluído o novo registro.
Juntar itens dos arquivos de um banco de dados.
CALL "BDJUNT" USING <statu> <arqui> <itens> <valos>.
bdjunt (<statu>, <arqui>, <itens>, <valos>);
|
<statu> |
área de 5 bytes, usada pela BDJUNT para indicar erros ou o sucesso da junção (valor igual a zero). |
|
<arqui> |
área de memória com 12 bytes, contendo nome de um arquivo. |
|
<itens> |
área de memória contendo, nos 5 primeiros bytes, o número de itens a serem acessados e a seguir os nomes dos itens do arquivo entidade e relacionamento referenciado e os nomes dos itens dos arquivos entidade ligados ao arquivo referenciado, que se deseja acessar. Cada nome de item deve ocupar 12 bytes. |
|
<valos> |
área de memória reservada para receber os valores lidos dos itens indicados em <itens>. |
A subrotina BDJUNT permite a junção de itens de dados de arquivos entidade a itens de outros arquivos (entidade ou relacionamento).
NOTA: O arquivo entidade deve ter sido anteriormente lido por alguma subrotina BDPEG*.
Leitura em cadeia do arquivo.
CALL "BDPEGC" USING <STATU> <ARQUI> <ITENS> <VALOS> <PROXC>.
bdpegc (<stats>, <arqui>, <itens>, <valos>, <proxc>);
|
<statu> |
área de 5 bytes, para sinalizar realização de uma leitura ou para comunicar uma condição de erro. |
|
<arqui> |
área com 12 bytes de comprimento, contendo o nome de um arquivo entidade ou relacionamento. Deve ter de 1 a 12 caracteres e se for menor que 12 caracteres, os restantes devem ser "brancos". |
|
<itens> |
área de memória que deverá conter nos 5 primeiros bytes a quantidade de itens a serem lidos e o restante da área deverá ser completado com os nomes dos itens relativos aos arquivos mencionados em <arqui> (cada nome deve estar numa área de 12 bytes). Quando nos 5 primeiros é passada a cadeia numérica "12345", as subrotinas BDPEG* assumem em <valos> os valores de todos os itens do registro, na ordem da declaração do arquivo no esquema. |
|
<valos> |
área de tamanho suficiente para que as subrotinas BDPEG* guardem os valores dos itens lidos de um registro. |
|
<proxc> |
este parâmetro tem 10 bytes e corresponde ao endereço do próximo registro a ser lido na cadeia. |
Executar uma leitura direta em arquivo.
CALL "BDPEGD" USING <STATU> <ARQUI> <ITENS> <VALOS> <NUMREG>.
bdpegd (<statu>, <arqui>, <itens>, <valos>, <numreg>);
|
<statu> |
área de 5 bytes, para sinalizar realização de uma leitura ou para comunicar uma condição de erro. |
|
<arqui> |
área com 12 bytes de comprimento, contendo o nome de um arquivo entidade ou relacionamento. Deve ter de 1 a 12 caracteres e se for menor que 12 caracteres, os restantes devem ser "brancos". |
|
<itens> |
área de memória que deverá conter nos 5 primeiros bytes, a quantidade de itens a serem lidos e o restante da área deverá ser completada com os nomes dos itens relativos aos arquivos mencionados em <arqui> (cada nome deve estar numa área de 12 bytes). Quando nos 5 primeiros bytes, é passada a cadeia numérica "12345", as subrotinas BDPEG* assumem em <valos> os valores de todos os itens do registro, na ordem da declaração do arquivo no esquema. |
|
<valos> |
área de tamanho suficiente, para que, as subrotinas BDPEG*guardem os valores dos itens lidos de um registro. |
|
<numreg> |
este parâmetro é uma área de 10 bytes que contém uma cadeia numérica com o número que representa o endereço de um registro no arquivo acessado. Se o número é zero, indica a BDPEGD para posicionar no início do arquivo para um possível leitura seqüencial deste arquivo. Se o número não e zero, a BDPEGD lê o registro no endereço de registro especificado. |
Executar uma leitura seqüencial invertida (de trás para diante).
CALL "BDPEGI" USING <STATU> <ARQUI> <ITENS> <VALOS> <ENDER>.
bdpegi (<statu>, <arqui>, <itens>, <valos>, <ender>);
|
<statu> |
área de 5 bytes, para sinalizar realização de uma leitura ou para comunicar uma condição de erro. |
|
<arqui> |
área com 12 bytes de comprimento, contendo o nome de um arquivo entidade ou relacionamento. Deve ter de 1 a 12 caracteres e se for menor que 12 caracteres, os restantes devem ser "brancos". |
|
<itens> |
área de memória que deverá conter, nos 5 primeiros bytes, a quantidade de itens a serem lidos e os restante da área que deverá ser completada com os nomes dos itens relativos aos arquivos mencionados em <arqui> (cada nome deve estar numa área de 12 bytes). Quando nos 5 primeiros, e passada a cadeia numérica "12345", as subrotinas BDPEG* assumem em <valos> os valores de todos os itens do registro, na ordem da declaração do arquivo no esquema. |
|
<valos> |
área de tamanho suficiente para que as subrotinas BDPEG* guardem os valores dos itens lidos de um registro. |
|
<ender> |
este parâmetro tem 10 bytes e conterá o endereço do registro acessado. |
O BDPEGI realiza uma leitura seqüencial invertida, isto é , do fim ao início do arquivo.
Para verificar que se chegou ao início do arquivo o valor do endereço do registro e zero.
Executar uma leitura por chave em arquivo.
CALL "BDPEGM" USING <STATU> <ARQUI> <ITENS> <VALOS> <VALCHA>.
bdpegm (<statu> <arqui>, <itens>, <valos>, <valcha>);
|
<statu> |
área de 5 bytes, para sinalizar realização de uma leitura ou para comunicar um condição de erro. |
|
<arqui> |
área com 12 bytes de comprimento, contendo o nome de um arquivo entidade ou relacionamento. Deve ter de 1 a 12 caracteres e se for menor que 12 caracteres, os restantes devem ser "brancos". |
|
<itens> |
área de memória que deverá conter nos 5 primeiros bytes, a quantidade de itens a serem lidos e o restante da área deverá ser completado com os nomes dos itens relativos aos arquivos mencionados em <arqui> (cada nome deve estar nume área de 12 bytes). Quando nos 5 primeiros, é passada a cadeia numérica "12345", as subrotinas BDPEG* assume que <valos> contém os valores de todos os itens do registro, na ordem de declaração do arquivo no esquema. |
|
<valos> |
área de tamanho suficiente para que as subrotinas BDPEG* guardem os valores dos itens lidos de um registro. |
|
<valcha> |
o usuário guarda neste parâmetro, o valor do item chave desejado para a procura em tantos bytes quantos forem necessários. A BDPEGM pesquisa o arquivo informado para encontrar o registro com um valor de item chave igual ao valor guardado neste parâmetro. |
A BDPGM realiza este tipo de leitura para localizar um registro num arquivo cujo valor de item chave é igual ao valor especificado pelo usuário em <VALCHA>, na chamada da BDPEGM. A BDPEGM procura o arquivo de dados especificado e carrega o registro com o mesmo valor de item chave. se a BDPEGM não encontrar um registro no arquivo com um item chave que seja condizente, carrega no primeiro campo de <STATU> o número de erro apropriado.
Ler o próximo registro por prefixo.
CALL "BDPEGP" USING <STATU> <ARQUI> <ITENS> <VALOS> <PROXC>.
bdpegp (<stats>, <arqui>, <itens>, <valos>, <proxc>);
|
<statu> |
área de 5 bytes, para sinalizar realização de uma leitura ou para comunicar uma condição de erro. |
|
<arqui> |
área com 12 bytes de comprimento, contendo o nome de um arquivo entidade ou relacionamento. Deve ter de 1 a12 caracteres e se for menor que 12 caracteres, os restantes devem ser "brancos". |
|
<itens> |
área de memória que deverá conter nos 5 primeiros bytes, a quantidade de itens a serem lidos e o restante da área deverá ser completado com os nomes dos itens relativos aos arquivos mencionados em <arqui> (cada nome deve estar numa área de 12 bytes). Quando nos 5 primeiros, é passada a cadeia numérica "12345", as subrotinas BDPEG* assumem em <valos> os valores de todos os itens do registro, na ordem da declaração do arquivo no esquema. |
|
<valos> |
área de tamanho suficiente para que as subrotinas BDPEG* guardem os valores dos itens lidos de um registro. |
|
<proxc> |
este parâmetro tem 10 bytes e corresponde ao endereço do próximo registro a ser lido na cadeia. |
A BDPEGP realiza este tipo de leitura para localizar o próximo registro com prefixo da chave igual ao valor especificado na BDACHP.
Executar uma leitura seqüencial.
CALL "BDPEGS" USING <STATU> <ARQUI> <ITENS> <VALOS> <ENDER>.
bdpegs (<statu>, <arqui>, <itens>, <valos>, <ender>;
|
<statu> |
área de 5 bytes, para sinalizar realização de uma leitura ou para comunicar uma condição de erro. |
|
<arqui> |
área com 12 bytes de comprimento, contendo o nome de um arquivo entidade ou relacionamento. Deve ter de 1 a 12 caracteres e se for menor que 12 caracteres, os restantes devem ser "brancos". |
|
<itens> |
área de memória que deverá conter nos 5 primeiros bytes, a quantidade de itens a serem lidos e o restante da área deverá ser completado com os nomes dos itens relativos aos arquivos mencionados em <arqui> (cada nome deve estar numa área de 12 bytes). Quando nos 5 primeiros, é passada a cadeia numérica "12345", as subrotinas BDPEG* assumem em <valos> os valores de todos os itens do registro, na ordem da declaração do arquivo no esquema. |
|
<valos> |
área de tamanho suficiente para que as subrotinas BDPEG*guardem os valores dos itens lidos de um registro. |
|
<ender> |
este parâmetro tem 10 bytes e recebe o endereço do registro acessado. |
A BDPEGS realiza uma leitura seqüencial consultando o endereço do último registro acessado no arquivo especificado. Esta informação é encontrada na tabela execução do arquivo. Se o arquivo de dados não foi acessado desde a abertura do Banco de Dados, o endereço do último registro é zero. A BDPEGS incrementa o endereço do último registro e pesquisa os registros até que se descubra um registro ocupado (não vazio) ou até que se encontre o final do arquivo. Se o registro foi encontrado o número (endereço) do registro é copiado para o parâmetro<ender>.Caso contrário, o parâmetro <ender> recebe zero indicando fim de arquivo.
Ler em cadeia invertida.
CALL "BDPEGT" USING <STATU> <ARQUI> <ITENS> <VALOS> <PROXC>.
bdpegt (<statu>, <arqui>, <itens>, <valos>, <proxc>;
|
<statu> |
área de 5 bytes, para sinalizar realização de uma leitura ou para comunicar uma condição de erro. |
|
<arqui> |
área com 12 bytes de comprimento, contendo o nome de um arquivo entidade ou relacionamento. Deve ter de 1 a 12 caracteres e se for menor que 12 caracteres, os restantes devem ser "brancos". |
|
<itens> |
área de memória que deverá conter nos, 5 primeiros bytes a quantidade de itens a serem lidos e o restante da área deverá ser completado com os nomes dos itens relativos aos arquivos mencionados em <arqui> (cada nome deve estar numa área de 12 bytes). Quando nos 5 primeiros, é passada a cadeia numérica "12345", as subrotinas BDPEG* assumem em <valos> os valores de todos os itens do registro, na ordem da declaração do arquivo no esquema. |
|
<valos> |
área de tamanho suficiente para que as subrotinas BDPEG* guardem os valores dos itens lidos de um registro. |
|
<proxc> |
este parâmetro tem10 bytes e corresponde ao endereço do próximo registro a ser lido na cadeia. |
Para se ler uma cadeia de trás para diante (do último para o primeiro registro da cadeia), a subrotina BDACHC deve ser chamada antes da BDPEGT para posicionar no último registro de uma cadeia.
Para acessar os registros anteriores na mesma cadeia, devem ser efetuadas novas chamadas da BDPEGT.
NOTA: O OpenBASE permite que o usuário fique "passeando" dentro de uma cadeia.
Após um BDACHC, é possível fazer chamadas a BDPEGC e a BDPEGT alternadamente, indo de frente para trás e de trás para frente dentro da mesma cadeia.
Executar uma leitura invertida por prefixo de chave caractere.
CALL "BDPEGV" USING <STATU> <ARQUI> <ITENS> <VALOS> <PROXC>.
bdpegv (<stats>, <arqui>, <itens>, <valos>, <proxc>);
|
<statu> |
área de 5 bytes, para sinalizar realização de uma leitura ou para comunicar uma condição de erro. |
|
<arqui> |
área com 12 bytes de comprimento, contendo o nome de um arquivo entidade ou relacionamento. Deve ter de 1 a 12 caracteres e se for menor que 12 caracteres, os restantes devem ser "brancos". |
|
<itens> |
área de memória que deverá conter nos 5 primeiros bytes a quantidade de itens a serem lidos e o restante da área deverá ser completado com os nomes dos itens relativos aos arquivos mencionados em <arqui> (cada nome deve estar numa área de 12 bytes). Quando nos 5 primeiros, é passada a cadeia numérica "12345", as subrotinas BDPEG* assumem em <valos> os valores de todos os itens do registro, na ordem da declaração do arquivo no esquema. |
|
<valos> |
área de tamanho suficiente para que as subrotinas BDPEG* guardem os valores dos itens lidos de um registro. |
|
<proxc> |
este parâmetro tem 10 bytes e corresponde ao endereço do próximo registro a ser lido na cadeia. |
A BDPEGV realiza este tipo de leitura para localizar o registro anterior com prefixo da chave igual ao valor especificado na BDACHP.
Posicionar em registro para leitura seqüencial.
CALL "BDPOSI" USING <STATU> <ARQUI> <ARGUM>.
bdposi (<statu>, <arqui>, <argum>);
|
<statu> |
área de 5 bytes, para sinalizar realização de uma leitura ou para comunicar um condição de erro. |
|
<arqui> |
área com 12 bytes de comprimento, contendo o nome de um arquivo entidade ou relacionamento. Deve ter de 1 a 12 caracteres e se for menor que 12 caracteres, os restantes devem ser "brancos". |
|
<argum> |
Argumentos para permitir posicionar o ponteiro de leitura seqüencial em um registro |
A subrotina BDPOSI permite posicionar o ponteiro de leitura seqüencial em um registro, cujo valor da chave de ordem (pode ser determinada pela subrotina BDESCH), seja igual a <argum>. Se não existir nenhum registro, com a chave igual a <argum>, o ponteiro se posiciona no primeiro registro maior (ou menor em leitura invertida).
Restaurar tabela de execução de arquivo.
CALL "BDREST" USING <STATU> <ARQUI> <AREAT>
bdrest (<statu>, <arqui>, <areat>);
|
<statu> |
área de 5 bytes, que contém um código de erro ou zero indicando sucesso na execução da subrotina. |
|
<arqui> |
área de 12 bytes, contendo o nome do arquivo. |
|
<areat> |
área de 40 bytes, que contém uma tabela de execução para o arquivo salvo pela subrotina BDSALV. |
A subrotina BDREST tem por fim restaurar a tabela de execução salva temporariamente pela subrotina BDSALV.
Salvar tabela de execução de arquivo.
CALL "BDSALV" USING <STATU> <ARQUI> <AREAT>.
bdsalv (<statu>, <arqui>, <areat>;
|
<statu> |
área de 5 bytes, que receberam um código de erro ou zero indicando sucesso na execução da subrotina. |
|
<arqui> |
área de memória com 12 bytes, contendo nome do arquivo. |
|
<areat> |
área de 40 bytes, que conterá a tabela de execução do arquivo. |
A rotina BDSALV, tem por fim salvar a tabela de execução de um arquivo, numa área de memória do programa que chama a subrotina, para permitir uma mudança temporária dê acesso ao arquivo.
Alterar valores de itens que não são chaves primárias.
CALL "BDTROC" USING <STATU> <ARQUI> <ITENS> <VALOS>.
bdtroc (<statu>, <arqui>, <itens>, <valos>);
|
<statu> |
área de memória com 5 bytes, usada pela BDTROC para retornar o valor zero quando ocorrer sucesso ou um valor que equivale a um erro. |
|
<arqui> |
área de memória com 12 bytes, contendo o nome do arquivo. Deve ter de 1 a 12 caracteres, se for menor que 12 caracteres, os restantes devem ser "brancos" (espaços). |
|
<itens> |
área de memória grande o suficiente para conter os 5 primeiros bytes a quantidade de itens a serem alterados e o restante da área deverá ser completado com os nomes dos itens do arquivo mencionado em <arqui>. |
|
<valos> |
área da memória contendo valores a serem colocados nos itens de dados especificados em itens. Estes valores serão concatenados na área. Cada valor deve ocupar todo o espaço definido para o item de dado no esquema do Banco. |
A BDTROC é usada para alterar os valores de itens dentro de um registro de um arquivo, desde que estes itens não sejam chaves primárias.
No uso desta subrotina é necessário bloquear o Banco antes de chamar a BDTROC, ou seja, se dois usuários em modo 2 estiverem acessando o mesmo arquivo de dados, é fundamental que se chame a BDBLOQ antes da BDTROC e após completar a alteração desbloquear o Banco/arquivo usando a BDDESB.
WORKING-STORAGE SECTION.
01 TROCAD.
05 STAT-TROC PIC 9 (05).
05 ARQ-TROC PIC X (12) VALUE "arqr".
05 ITENS.
10 QUANT PIC 9 (05) VALUE 3.
10 NOME-ITEM PIC X (36) VALUE "rreg01 rreg02 RREG03 ".
05 TRAB.
10 WREG01 PIC X (03) value "101".
10 WREG02 PIC X (03) value "111".
10 WREG03 PIC 9 (02) value "11".
PROCEDURE DIVISION.
INICIO.
*abertura do Banco
CALL "BDABRE" USING STAT-ABRE NOME-BANCO NIVEL SEGUR MODO.
*leitura do registro
CALL "BDPEGM" USING STAT-PGM NOME-ARQ ITEM-PGM VALOS VALCHA.
*bloqueio do banco
CALL "BDBLOQ" USING STAT-BLQ.
*alteração
CALL "BDTROC" USING STAT-TROC ARQ-TROC ITENS TRAB.
IF STAT-TROC NOT=ZERO
DISPLAY "ERRO".
*desbloqueio do banco
CALL "BDDESB" USING STAT-BLQ.
*fechamento do banco
CALL "BDFECH" USING STAT-FECH.
main()
{
char quant[6];
char nome-iten[37];
char trab[10];
char stat-troc[6];
char arq-troc[13];
/*abertura do banco*/
bdabre (stat-abre, nome-banco, nivel, segur, modo);
/*leitura do registro*/
bdpegm (stat-pgm, nome-arq, item-pgm, valos, valcha);
/*bloqueio do banco*/
bdbloq (stat-blq);
/*alteração/
strcpy (arq-troc "arqr");
strcpy (quant, "00003");
strcpy (nome-item, "rreg01 rreg02 rreg03 ");
strcpy (trab, "101111011");
bdtroc (stat-troc, arq-troc,itens,trab);
if(memcmp(stat-troc,"00000",5)!=0){
printf("erro");
exidt(1);
}
/*desbloqueia banco */
bddesb(stat-dbq);
/* fechamento do Banco */
bdfech(stat-fech);
}
Criar arquivo tsopcoes.t no diretório HOME do usuário ou no diretório /usr/tsgbd, com prioridade para o primeiro.
Os registros do arquivo devem ter o formato:
texto: Comando
onde:
|
texto |
aparecerá como prompt na opção diversos, e deve ter o tamanho máximo de 20 caracteres, a primeira letra maiúscula determinará a chave para escolha da opção. |
|
Comando |
será o comando/programa do sistema operacional a ser executado; as cadeias de caracteres $1 a $9 podem ser usadas para receber parâmetros. Deve ter no máximo 60 caracteres. Quando utiliza-se parâmetros, para cada parâmetro declarado será exibida uma janela onde o usuário deve informar o valor para o parâmetro. |
Colocar como opção no menu diversos a execução do comando who para exibir os usuários ativos no sistema.
Conteúdo do arquivo tsopcoes.t: usuários ativos: who.
