Thread In gleiche Referenz speichern... (15 answers)
Opened by zipster at 2006-06-12 15:36

zipster
 2006-06-12 16:06
#67239 #67239
User since
2004-09-06
458 Artikel
BenutzerIn
[default_avatar]
Ich versuchs mal...

Als erstes befülle ich die REF
Code: (dl )
$ref_hash_haupt             = &datensatz_von_datenbank_laden( $dbh, "select * from kontakte where ID = ?", $id, "fetchrow_hashref", "");

Danach baue ich die Gui auf
Code: (dl )
&kontaktfenster_inhalt_aufbauen($frame_kontakte_haupt, \%{$ref_hash_haupt}, $registerkarte,....


In der Gui gibt es die Blätter und die Speicher Funktion
Code: (dl )
1
2
3
$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
Code: (dl )
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...