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