Olá, bom dia!
Interessante a questão, já vi outras mensagens com a mesma dúvida… Não testei aqui, mas imagino que seria algo assim:
1º - Criar um campo texto na consulta, inserindo manualmente o checkbox com array dos valores;
2º - Criar uma aplicação blank para tratar e duplicar os registros;
3º - Fazer a ligação entre a consulta e a apl blank, enviando o array como parâmetro
Exemplo:
-
Na consulta, criar um campo Texto (ex: nome “check”) e um botão do tipo Ligação (ex: nome “duplicar”)
-
No Evento OnRecord da consulta:
[tt]
$valor = {Depto}."/".{Curso}."/".{Disciplina}."/".Ano_letivo;
// Exemplo de valor armazenado: “121/1058/5945557/2009”
{check} = “”;
[/tt]
-
Criar uma ligação pro botão “duplicar”, apontando pra aplicação blank e enviando $opt como parametro
- Aplicação Blank (ex: ctt.php):
[tt]
/**
- Criar função duplicar -> Confere dados e realiza a duplicação.
- Recuperar valores de $opt
- Separar cada registro selecionado na consulta
- Separar os campos por “/”
- Chamar a função de duplicação
- Conferir se todos forem alterados (retorna para consulta ou mostra erros)
*/
function duplicar($depto,$curso, $disc, $ano, $ano_n)
{
sc_lookup(sqlcont, “SELECT COUNT(*) FROM tabela WHERE Depto = ‘$depto’ AND Curso = ‘$curso’ AND Disciplina = ‘$disc’ AND Ano_Letivo = ‘$ano’”);
if (empty({sqlcont}) || {sqlcont}[0][0] == 0)
{
$erro = "- Falha ao localizar registro: $depto / $curso / $disc / $ano
";
return $erro;
}
else
{
sc_exec_sql(“INSERT INTO tabela (Depto, Curso, Disciplina, Ano_Letivo, …) VALUES ($depto, $curso, $disc, $ano_n, …)”);
// adicionar outros campos necessários
return true;
}
}
$campo = [opt];
$qtde = count($campo);
if ($qtde === 0)
{
// nenhum campo selecionado
sc_redir(consulta.php);
}
$msg = “”;
for ($i = 0; $i < $qtde; $i++)
{
$ef = explode("/", $campo[$i]);
$depto = trim($ef[0]);
$curso = trim($ef[1]);
$disc = trim($ef[2]);
$ano = trim($ef[3]);
$ano_n = date(‘Y’);
$dup = duplicar($depto, $curso, $disc, $ano, $ano_n);
if ($dup != true)
{
// se a função não retornar ‘true’, armazenar os erros na variavel msg
$msg .= $dup;
}
}
// se a variavel msg estiver vazia, redirecionar para consulta, senão, mostrar os erros.
if ($msg == “”)
{
sc_commit_trans(); // apenas se usar transactions (mysql)
sc_redir(consulta.php);
}
else
{
echo " Erros ao duplicar registros:
";
echo $msg;
echo “
Voltar”;
}
[/tt]
Acho que a idéia é mais ou menos isso aí…
Com certeza existem erros no código, precisa corrigi-lo e também adaptá-lo conforme suas necessidades, mas espero ter ajudado de alguma forma…
Att.
Robson