home *** CD-ROM | disk | FTP | other *** search
- ############################################################################
- #
- # Win32::ASP::Field::datetime - implements datetime fields in the Win32-ASP-DB system
- #
- # Author: Toby Everett
- # Revision: 0.02
- # Last Change:
- ############################################################################
- # Copyright 1999, 2000 Toby Everett. All rights reserved.
- #
- # This file is distributed under the Artistic License. See
- # http://www.ActiveState.com/corporate/artistic_license.htm or
- # the license that comes with your perl distribution.
- #
- # For comments, questions, bugs or general interest, feel free to
- # contact Toby Everett at teverett@alascom.att.com
- ############################################################################
-
- use Win32::ASP::Field;
- use Error qw/:try/;
- use Win32::ASP::Error;
- use Win32::OLE::Variant;
-
- package Win32::ASP::Field::datetime;
-
- @ISA = ('Win32::ASP::Field');
-
- use strict;
-
- sub _check_value {
- my $self = shift;
- my($value) = @_;
-
- if (defined $value and $self->clean_datetime($value) eq '-1') {
- throw Win32::ASP::Error::Field::bad_value (field => $self, bad_value => $value,
- error => "The value is not in a legal datetime format.");
- }
-
- $self->SUPER::_check_value($value);
- }
-
- sub _read {
- my $self = shift;
- my($record, $results, $columns) = @_;
-
- my $name = $self->name;
- ref($columns) and !$columns->{$name} and return;
- $self->can_view($record) or return;
- my $temp = $results->Fields->Item($name);
- if ($temp) {
- my $value = $temp->Value;
- $value ne '' and $value = $self->clean_datetime($value);
- $record->{orig}->{$name} = $value;
- }
- }
-
- sub _post {
- my $self = shift;
- my($record, $row) = @_;
-
- $self->SUPER::_post($record, $row);
-
- my $name = $self->name;
- if (defined $record->{edit}->{$name}) {
- my $temp = $self->clean_datetime($record->{edit}->{$name});
- $temp ne '-1' and $record->{edit}->{$name} = $temp;
- }
- }
-
- sub _as_sql {
- my $self = shift;
- my($value) = @_;
-
- $self->check_value($value);
-
- defined $value or return 'NULL';
-
- $value = "'".$self->clean_datetime($value)."'";
- return $value;
- }
-
- sub _date_lcid {
- my $self = shift;
- my($DTobj) = @_;
-
- return "M/d/yyyy";
- }
-
- sub _time_lcid {
- my $self = shift;
- my($DTobj) = @_;
-
- return "h:mm:ss tt";
- }
-
- sub _format_date {
- my $self = shift;
- my($DTobj) = @_;
-
- return $DTobj->Date($self->date_lcid);
- }
-
- sub _format_time {
- my $self = shift;
- my($DTobj) = @_;
-
- my $temp = $DTobj->Time($self->time_lcid);
- my $temp2 = Win32::OLE::Variant->new(8, $temp);
- $temp2->ChangeType(7);
- $temp2->ChangeType(5);
- return $temp2 ? $temp : '';
- }
-
- { my %memo;
- sub _clean_datetime {
- my $self = shift;
- my($DTstr) = @_;
-
- unless (exists $memo{$DTstr}) {
- my $temp = Win32::OLE::Variant->new(8, $DTstr);
- $temp->ChangeType(7) or return -1;
- $memo{$DTstr} = $self->format_date($temp)." ".$self->format_time($temp);
- }
- return $memo{$DTstr};
- }
- }
-
- 1;
-