Existem duas formas de fazer acesso aos dados do banco de dados no Scriptcase: Usando as macros sc_lookup
e sc_select
. Vamos aprender uma forma simplificada de manipular estes dados do banco com uma função que eu criei para usar nos meus projetos: lw_lookup
.
Exemplo:
Para exemplificar a aplicação das macros vamos supor que queremos uma listagem com o nome, telefone e nascimento dos clientes.

Para criar este exemplo usaremos uma aplicação blank do Scriptcase onde será aplicada a tag HTML <h2>
para o nome e uma quebra <br>
para o Nascimento.
Usando a macro sc_lookup
Para usar a macro sc_lookup
do Scriptcase você tem a seguinte sintaxe:
1 | sc_lookup(Dataset, “Comando SQL”, “Conexão”); |
Dataset é um array bidimensional com o índice das colunas e linhas definido.
Neste exemplo vamos fazer um SELECT
na tabela de cliente usando sc_lookup
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | $sql = 'SELECT cliid, clistatus, clinome, clitel, cliemail, clinasc, cliempresa, clicep, cliobs, clilogo FROM cliente'; sc_lookup(ds, $sql ); for ( $i = 0; $i < count ({ds}); $i ++) { echo '<h2>' . {ds[ $i ][2]} . '</h2>Telefone: ' . {ds[ $i ][3]} . '<br>Nascimento: ' . date ( 'd/m/Y' , strtotime ({ds[ $i ][5]})); } |
Observe que usando a sc_lookup
para acessar os registros é necessário indicar o número da linha e coluna.
Por exemplo, para acessar o telefone é necessário fazer:
1 | {ds[ $i ][3]}; |
Quando se faz um select com muitas colunas a gente precisa contar para saber exatamente qual é o índice referente a coluna desejada.
Eu já fiz isso muito até apliquei “aquela velha técnica japonesa” de colocar os dois primeiros campos na linha 1 do código mas não funciona quando o select está no meio do código.

Já usei muito isso sempre pensando que deveria ter uma forma mais simples de fazer esta associação.
Usando a macro sc_select
Para ter o mesmo resultado com sc_select
é necessário fazer o while
no dataset e conferir se houve erro.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | $sql = 'SELECT cliid, clistatus, clinome, clitel, cliemail, clinasc, cliempresa, clicep, cliobs, clilogo FROM cliente'; sc_select(ds, $sql ); if ( {ds} === false ) { echo "Erro de acesso. Mensagem = " . {ds_erro}; } else { while (!{ds}->EOF) { echo '<h2>' . {ds}->fields[2] . '</h2>Telefone: ' . {ds}->fields[3] . '<br>Nascimento: ' . date ( 'd/m/Y' , strtotime ({ds}->fields[5])); {ds}->MoveNext(); } {ds}->Close(); } |
Neste caso para acessar o mesmo telefone temos duas opções:
1 2 | echo {ds}->fields[3]; // ou echo {ds}->fields['clitel']; |
A segunda opção é mais amigável, mas de qualquer forma o seu código ficará poluído com um if
e um while
que não tem relação direta com a regra de negócio a ser implementada.
Penso que esse tratamento deveria estar separado do meu código principal.
Por isso criei a função lw_lookup()
veja a diferença e como melhora a legibilidade do código.
Função lw_lookup
A grande diferença é que aqui eu manipulo os dados com base no nome do campo da tabela. Eu tenho um array bidimensional com cada nome.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $sql = 'SELECT cliid, clistatus, clinome, clitel, cliemail, clinasc, cliempresa, clicep, cliobs, clilogo FROM cliente'; $clientes = lw_lookup( $sql ); |
Veja por exemplo um print_r
deste array.

Se você quiser simplificar ainda mais o acesso aos dados você pode dar um extract
aqui dentro do foreach
. Vou criar um alias para os campos que eu usei aqui no exemplo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | $sql = 'SELECT cliid, clistatus, clinome, clitel, cliemail, clinasc, cliempresa, clicep, cliobs, clilogo FROM cliente'; $clientes = lw_lookup( $sql ); foreach ( $clientes as $cli ) { extract( $cli ); echo '<h2>' . $clinome . '</h2>Telefone: ' . $clitel . '<br>Nascimento: ' . date ( 'd/m/Y' , strtotime ( $clinasc )); } |
Acessando diretamente o registro ou campo da tabela
Veja um exemplo simples em que a função vai permitir acessar o campo em apenas uma linha:
1 | $nome = lw_lookup( "SELECT clinome FROM cliente WHERE cliid = 1" )[0][ 'clinome' ]; |
Código da função lw_lookup
Para utilizar a função lw_lookup
vá em ferramentas, bibliotecas internas, bibliotecas públicas e clique em nova para criar uma nova.

Informe o nome do arquivo “lwLookup.php”, a descrição “Criando uma nova biblioteca interna”.
Cole o código a seguir:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?php function lw_select( $pdo ) { $arrSelect = array (); if ( $pdo ) { while (! $pdo -> EOF) { $arr = $pdo -> fields; $campos = array_filter ( $arr , function ( $k ) { return (! is_int ( $k )); }, ARRAY_FILTER_USE_KEY); $arrSelect [] = $campos ; $pdo -> MoveNext(); } $pdo -> close(); } return $arrSelect ; } function lw_lookup( $sql ) { sc_select(ds, $sql ); $res = lw_select({ds}); return $res ; } ?> |
Aqui temos duas funções: a lw_select
que faz a mágica acontecer e a lw_lookup
que foi usada nos exemplos acima.
A parte principal da lw_select
é a função do PHP array_filter
que retorna somente os índices do array $pdo->fields
que não são inteiros.
Praticamente ela dá uma limpa no array de retorno do sc_select
.
Já a função lw_lookup
apenas usa o sc_select
para acessar o dataset bruto chama o lw_select
para fazer a limpeza.
Conclusão
Como a função é baseada na macro do Scriptcase sc_select
a gente tem ótima compatibilidade, inclusive com o modo debug ativado funciona perfeitamente.
Prezo muito pela legibilidade do código pois você vai precisar dar manutenção no código e se o código estiver limpo você tem muito mais facilidade.
Essa foi a nossa dica de hoje. Comente aqui se foi útil para você.
Um abraço e até a próxima.