Thread In gleiche Referenz speichern...
(15 answers)
Opened by
zipster
at 2006-06-12 15:36
User since 2004-09-06
458
Artikel
BenutzerIn
Ich versuchs mal...
Als erstes befülle ich die REF
$ref_hash_haupt = &datensatz_von_datenbank_laden( $dbh, "select * from kontakte where ID = ?", $id, "fetchrow_hashref", "");
Danach baue ich die Gui auf
&kontaktfenster_inhalt_aufbauen($frame_kontakte_haupt, \%{$ref_hash_haupt}, $registerkarte,....
In der Gui gibt es die Blätter und die Speicher Funktion
$frame_kontakte_haupt->Button(-text => '>>', -command => [\&naechster_Datensatz, $ref_hash_haupt->{'id'}, $frame_kontakte_haupt, \%{$ref_hash_haupt}, $registerkarte,....])->grid(-row=>'0', -column=>'5', -sticky => 'w');
$button_speichern=$frame_top_toolbox->Button(-text => "Speichern", -command => sub{&sichern($dbh, "kontakte", \%{$ref_hash_haupt}, "zimmer_id", "zimmer", "fetchrow"), &sichern($dbh, "adresse", \%{$ref_hash_adresse}, "zimmer_id", "zimmer", "fetchall", $ref_hash_haupt->{'id'})},)->grid(-row=>'0', -column=>'2', -sticky => 'w');
Hier noch beide Subs
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
sub naechster_Datensatz{ my ($id, $frame_kontakte_haupt, $ref_hash_haupt, $registerkarte,...) = @_; my $sth = $dbh->prepare( "SELECT id FROM kontakte WHERE id $zeichen ? LIMIT 1" ); $sth->execute ($id); my $ref = $sth->fetchrow_hashref(); $sth->finish (); if ((!defined($ref)) && ($zeichen eq "<")){ $sth = $dbh->prepare( "SELECT id FROM kontakte ORDER BY id DESC LIMIT 1" ); $sth->execute (); $ref = $sth->fetchrow_hashref(); $sth->finish (); } if ((!defined($ref)) && ($zeichen eq ">")){ $sth = $dbh->prepare( "SELECT id FROM kontakte ORDER BY id LIMIT 1" ); $sth->execute (); $ref = $sth->fetchrow_hashref(); $sth->finish (); } $ref_hash_haupt = &datensatz_von_datenbank_laden( $dbh, "select * from kontakte where ID = ?", $ref->{'id'}, "fetchrow_hashref", ""); for my $item($frame_kontakte_haupt->children()){ $item->destroy(); } for my $item($registerkarte->children()){ $item->destroy(); } for my $item($frame_top_toolbox->children()){ $item->destroy(); } print "ID_HASH $ref_hash_haupt->{'id'}\n"; &kontaktfenster_inhalt_aufbauen($frame_kontakte_haupt, \%{$ref_hash_haupt}, $registerkarte,...);
}#naechster_Datensatz
sub sichern{ my ($dbh, $tabellen_name, $hash_ref, $typ_fuer_browseentry, $tabelle_fuer_browseentry, $art_der_sicherung, $id_von_hauptkontakt) = @_; my ($sql, $zeilen_bezeichnung, @array, $zeile, $values); #$hash_ref = typ_in_wert_wandeln(\%{$hash_ref}, $typ_fuer_browseentry, $tabelle_fuer_browseentry, $dbh, "id", "beschreibung"); if ($art_der_sicherung eq "fetchall"){ my $sth_id_kontrolle =$dbh->prepare ("select id from $tabellen_name"); $sth_id_kontrolle->execute (); my $id_kontrolle = $sth_id_kontrolle->fetchall_hashref('id'); $sth_id_kontrolle->finish(); foreach my $datensatz_id (sort keys(%{$hash_ref})) { if (defined($id_kontrolle->{$datensatz_id})){ foreach $zeilen_bezeichnung (keys(%{$hash_ref->{$datensatz_id}})) { $sql .= "," if $sql; $sql .= "$zeilen_bezeichnung"." = ?"; $values = Encode::encode ("ISO-8859-1", $hash_ref->{$datensatz_id}->{$zeilen_bezeichnung}); push (@array, "$values"); } push (@array, $datensatz_id); $sql = "UPDATE $tabellen_name SET $sql WHERE id = ?"; $dbh->do ($sql, undef, @array); undef $sql; undef @array; } else { print "INSERT"; foreach $zeilen_bezeichnung (keys(%{$hash_ref->{$datensatz_id}})) { next if (!defined ($hash_ref->{$datensatz_id}->{$zeilen_bezeichnung})); $sql .= "," if $sql; $sql .= "$zeilen_bezeichnung"." = ?"; $hash_ref->{$datensatz_id}->{'kontakte_id'} = $id_von_hauptkontakt; $values = Encode::encode ("ISO-8859-1", $hash_ref->{$datensatz_id}->{$zeilen_bezeichnung}); push (@array, "$values"); } push (@array, $datensatz_id); $sql = "INSERT INTO $tabellen_name SET $sql" if (defined ($sql)); print "\n\n $sql \n\n"; if (defined ($sql)){ $dbh->do ($sql, undef, @array); } undef $sql; undef @array; #$hash_ref = &leere_zeilen_an_hlist_anhaengen( $dbh, "select * from $tabellen_name where kontakte_id = ?", $id_von_hauptkontakt, \%{$hash_ref}); } } } elsif($art_der_sicherung eq "fetchrow"){ if (defined($hash_ref->{'id'})){ foreach $zeilen_bezeichnung (keys(%{$hash_ref})) { $sql .= "," if $sql; $sql .= "$zeilen_bezeichnung"." = ?"; $values = Encode::encode ("ISO-8859-1", $hash_ref->{$zeilen_bezeichnung}); push (@array, "$values"); } push (@array, $hash_ref->{'id'}); $sql = "UPDATE $tabellen_name SET $sql WHERE id = ?"; print @array; $dbh->do ($sql, undef, @array); undef $sql; undef @array; } else { foreach $zeilen_bezeichnung (keys(%{$hash_ref})) { next if (!defined ($hash_ref->{$zeilen_bezeichnung})); $sql .= "," if $sql; $sql .= "$zeilen_bezeichnung"." = ?"; $values = Encode::encode ("ISO-8859-1", $hash_ref->{$zeilen_bezeichnung}); push (@array, "$values"); } $sql = "INSERT INTO $tabellen_name SET $sql" if (defined ($sql)); print "\n\n $sql \n\n"; if (defined ($sql)){ $dbh->do ($sql, undef, @array); } undef $sql; undef @array; } } }
}#sichern
Die Speicherfunktion funktioniert super bis geblättert wird. Denn dann ist in der Speicherfunktion immer noch die alte ref. Und bei jedem Blättern erhöht sich auch die Speichernutztung meines Programms.
View full thread In gleiche Referenz speichern...
|