DBI
Pavel Kunc
kupa na cmail.cz
Pondělí Květen 15 14:17:52 MEST 2000
Ahoj,
pookousim se napsat skriptik pro provadeni operaci s databazi. Jeho soucasti
by mel byt update polozky, kterej sice funguje ale ne tak jak bych chtel.
Mam napr. polozku:
index kategorie typ rok nazev autor
X99 4 sklo vaza
Update typu X99 -> X999, rok = 1999 mi funguje bez problemu, ale vymazani
hodnoty napr. typ = '' mi DBI nebere.
Ono se nemusi vymazavat, staci, kdyz uzivatel nic nevyplní ve formulari,
napr. rok a problem je stejnej
Jak tedy vymazat hodnotu z databaze a jak postavit SQL aby prolezlo pres
prepare a execute?
Prikladam kod, kterym to delam. Urcite se toho da napsat spoustu
jednoduseji, ale ja jsem rad ze to aspon funguje jak to funguje. A kdyby Vas
neobtezovalo poradit.......
Diky
sub DB_update
{
local ($db, $st, $SQL, $templ, $out);
$SQL = "index_polozky = '$VALUES{'index_polozky'}'";
$databaze = $VALUES{'db'};
delete $VALUES{'db'};
foreach $key (keys %VALUES) {
# if (!($VALUES{$key} eq '')) { <- To sice ohlida prazdne hodnoty ale to
ja nechci, kdyz potrebuju mazat
$value = $VALUES{$key};
$value =~ s/(....\D.*|\D.*)/\'$1\'/g;
$par = join " = ", $key, $value;
push @COLUMNS, $par;
# }
}
$col = join ', ', @COLUMNS;
if ($databaze eq 'k'){$db = DBI->connect('dbi:ODBC:ANTIKVA_KATALOG') ||
&Return_error();}
else {$db = DBI->connect('dbi:ODBC:ANTIKVA_AKTUAL') || &Return_error();}
$st = $db->prepare("UPDATE polozky SET $col WHERE $SQL") ||
&Return_error('PREPARE', $col);
$st->execute() || die &Return_error('EXECUTE', $col);
$db->disconnect;
$templ = new
Perlfect::Template('D:\Danteroot\Dante\antikva\templates\dbedit.htm');
Další informace o konferenci Perl