use Win32::ODBC; package HitCounter; # Constructor sub new { my $class = shift; # get class name. my $DSN = shift; # get data source name. # define a counter object. my $counter = {dsn => $DSN, dbConn => undef}; my $counterDB = new Win32::ODBC($DSN); $counter->{dbConn} = $counterDB if $counterDB; # bless the student into the package Student. bless $counter, $class; $counter; } # Destructor. sub DESTROY { $self->{dbConn}->Close() if $self->{dbConn}; } sub increment { my $self = shift; return 0 if !$self->{dbConn}; my $count = 0; my $filename = shift; # Prepare for SQL string $filename =~ s/'/''/g; my $sql = "select HitCount from Counter where Filename = '$filename'"; if ($self->{dbConn}->Sql($sql)) { return 0; } else { if ($self->{dbConn}->FetchRow()) { # Has result. my %Data = (); %Data = $self->{dbConn}->DataHash(); $count = $Data{'HitCount'} + 1; # Update hit count. $sql = "update Counter set HitCount = $count where Filename = '$filename'"; } else { $count = 1; $sql = "insert into Counter(Filename, HitCount) values('$filename', 1)"; } $self->{dbConn}->Sql($sql); } $count; } 1;