David,

You've written your ASP in JavaScript (or Drumbeast 2000 did it for you).
Apache::ASP is for scripts written in PERL that want to take advantage of
the ASP object API.  If you want to run your JavaScript ASP on a non-IIS
platform you will have to go with another solution (like from ChiliSoft).

Hope this help,
Alex

> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]On
> Behalf Of David Vaught-Alexander
> Sent: Friday, February 04, 2000 5:29 AM
> To: [EMAIL PROTECTED]
> Subject: Apache::ASP
>
>
> Okay, I'm new to asp. It's been a nightmare getting my redhat 6.0 httpsd
> server to even process this stuff. Anyway, I finally got some action. So
> after my demo stuff worked for the most part, I tried this guestbook I
> generated in Drumbeat 2000...I'm lost.
>
> 1. loaded  http://admin.biojazz.com/dbeat/gbook/Index.asp
> 2. clicked on "add entry"
>
> got what's below
>
> The server error_log says (this is followed by the page
> output...arrggghhhhhhhhhhhhhhhhh!)
>
> --------------------------------------------------------------------------
>
> [Fri Feb  4 02:21:36 2000] [error] [asp] [debug] [3841] STARTING ASP
> HANDLER (v0.09) for file
> /users/admin/public_html/dbeat/gbook/ViewEntrySummaries.asp
> [Fri Feb  4 02:21:36 2000] [error] [asp] [debug] [3841] GlobalASA
> package
> Apache::ASP::Compiles::_users_admin_public_html_dbeat_gbook___global_asa
>
> [Fri Feb  4 02:21:36 2000] [error] [asp] [debug] [3841] created
> $Application -
> [Fri Feb  4 02:21:36 2000] [error] [asp] [debug] [3841] SessionCookie -
> b8724d9dacf210ccfec9940681e5a3bd
> [Fri Feb  4 02:21:36 2000] [error] [asp] [debug] [3841] new session
> state Apache::ASP::State=HASH(0x8219850)
> [Fri Feb  4 02:21:36 2000] [error] [asp] [debug] [3841] session timed
> out, clearing
> [Fri Feb  4 02:21:36 2000] [error] [asp] [debug] [3841] Session_OnEnd -
> session: b8724d9dacf210ccfec9940681e5a3bd;
> [Fri Feb  4 02:21:36 2000] [error] [asp] [debug] [3841] tieing session -
>
> [Fri Feb  4 02:21:36 2000] [error] [asp] [debug] [3841] forcing groups
> cleanup
> [Fri Feb  4 02:21:37 2000] [error] [asp] [debug] [3841] group check
> GroupIdb8
> [Fri Feb  4 02:21:37 2000] [error] [asp] [debug] [3841] skipping delete
> self - id: b8724d9dacf210ccfec9940681e5a3bd;
> [Fri Feb  4 02:21:37 2000] [error] [asp] [debug] [3841] cleanup groups -
> deleted: 0;
> [Fri Feb  4 02:21:37 2000] [error] [asp] [debug] [3841]
> Application_OnEnd
> [Fri Feb  4 02:21:37 2000] [error] [asp] [debug] [3841]
> Application_OnStart
> [Fri Feb  4 02:21:37 2000] [error] [asp] [debug] [3841] Session_OnStart
> - session: b8724d9dacf210ccfec9940681e5a3bd;
> [Fri Feb  4 02:21:37 2000] [error] [asp] [debug] [3841] ASP object
> created - Application: Apache::ASP::Application=HASH(0x832ff98);
> GlobalASA: Apache::ASP::GlobalASA=HASH(0x8334184); Internal:
> Apache::ASP::State=HASH(0x831e574); Request:
> Apache::ASP::Request=HASH(0x8314164); Response:
> Apache::ASP::Response=HASH(0x8314218); Server:
> Apache::ASP::Server=HASH(0x831e4c0); Session:
> Apache::ASP::Session=HASH(0x831e5f8); app_start: 0; basename:
> ViewEntrySummaries.asp; buffering_on: 1; cgi_do_self: 0; command_line: ;
> compile_error: ; compile_includes: ; cookie_path: /; debug: 2;
> debugs_output: ARRAY(0x8314398); dirname:
> /users/admin/public_html/dbeat/gbook; errors: 0; errors_output:
> ARRAY(0x831e52c); filehandle: ; filename:
> /users/admin/public_html/dbeat/gbook/ViewEntrySummaries.asp; filter: 0;
> global: /users/admin/public_html/dbeat/gbook/.; group_refresh: 3;
> groups_refresh: 3; id:
> _users_admin_public_html_dbeat_gbook_ViewEntrySummaries_asp____INLINE;
> mtime: 948361945; no_cache: ; no_headers: 0; no_session: 0; no_state: ;
> pod_comments: 1; r: Apache=SCALAR(0x831408c); remote_ip: 208.32.76.146;
> secure_session: ; session_serialize: ; session_timeout: 30;
> soft_redirect: ; stat_inc: ; state_db: SDBM_File; state_dir: ./.state;
> state_manager: 10;
> [Fri Feb  4 02:21:37 2000] [error] [asp] [debug] [3841] compiling -
> package:
> _users_admin_public_html_dbeat_gbook_ViewEntrySummaries_asp____INLINE;
> [Fri Feb  4 02:21:37 2000] [error] [asp] [error] /* Connection Pooler
> */: ?+*{} follows nothing in regexp at (eval 41) line 1660. <--> ,
> /usr/lib/perl5/site_perl/5.005/Apache/ASP.pm line 818
> [Fri Feb  4 02:21:37 2000] [error] [asp] [debug] [3841] building cgi
> headers
> [Fri Feb  4 02:21:37 2000] [error] [asp] [debug] [3841] sending cgi
> headers
> [Fri Feb  4 02:21:38 2000] [error] [asp] [debug] [3841] destroying -
> asp: Apache::ASP=HASH(0x8334478);
>
>
> ------------------------------------------------------------------
> ----------------------
>
> ...as the page displays this
>
> Thanks for any hints (and if I ever get jre to work so netscape doesn't
> crash each time I hit a j enabled page...well...that's WAY off this
> topic isn't it ;-)
>
> ------------------------------------------------------------------
> -----------------------
>
> Errors Output
>
> /* Connection Pooler */: ?+*{} follows nothing in regexp at (eval 204)
> line 1660.
> , /usr/lib/perl5/site_perl/5.005/Apache/ASP.pm line 818
>
> Debug Output
>
> STARTING ASP HANDLER (v0.09) for file
> /users/admin/public_html/dbeat/gbook/ViewEntrySummaries.asp
> GlobalASA package
> Apache::ASP::Compiles::_users_admin_public_html_dbeat_gbook___global_asa
>
> compiling - package: _users_admin_public_html_dbeat_gbook___global_asa;
> global.asa routines -
> created $Application -
> SessionCookie - b8724d9dacf210ccfec9940681e5a3bd
> new session state Apache::ASP::State=HASH(0x8157c7c)
> session timed out, clearing
> Session_OnEnd - session: b8724d9dacf210ccfec9940681e5a3bd;
> tieing session -
> forcing groups cleanup
> group check GroupIdb8
> skipping delete self - id: b8724d9dacf210ccfec9940681e5a3bd;
> cleanup groups - deleted: 0;
> Application_OnEnd
> Application_OnStart
> Session_OnStart - session: b8724d9dacf210ccfec9940681e5a3bd;
> ASP object created - Application:
> Apache::ASP::Application=HASH(0x8408c74); GlobalASA:
> Apache::ASP::GlobalASA=HASH(0x8414220); Internal:
> Apache::ASP::State=HASH(0x83edf18); Request:
> Apache::ASP::Request=HASH(0x8405ed0); Response:
> Apache::ASP::Response=HASH(0x8414130); Server:
> Apache::ASP::Server=HASH(0x831f8c8); Session:
> Apache::ASP::Session=HASH(0x835aa90); app_start: 0; basename:
> ViewEntrySummaries.asp; buffering_on: 1; cgi_do_self: 0; command_line: ;
> compile_error: ; compile_includes: ; cookie_path: /; debug: 2;
> debugs_output: ARRAY(0x8404ba0); dirname:
> /users/admin/public_html/dbeat/gbook; errors: 0; errors_output:
> ARRAY(0x8404a5c); filehandle: ; filename:
> /users/admin/public_html/dbeat/gbook/ViewEntrySummaries.asp; filter: 0;
> global: /users/admin/public_html/dbeat/gbook/.; group_refresh: 3;
> groups_refresh: 3; id:
> _users_admin_public_html_dbeat_gbook_ViewEntrySummaries_asp____INLINE;
> mtime: 948361945; no_cache: ; no_headers: 0; no_session: 0; no_state: ;
> pod_comments: 1; r: Apache=SCALAR(0x83f7ed8); remote_ip: 208.32.76.146;
> secure_session: ; session_serialize: ; session_timeout: 30;
> soft_redirect: ; stat_inc: ; state_db: SDBM_File; state_dir: ./.state;
> state_manager: 10;
> compiling - package:
> _users_admin_public_html_dbeat_gbook_ViewEntrySummaries_asp____INLINE;
> /* Connection Pooler */: ?+*{} follows nothing in regexp at (eval 204)
> line 1660.
> , /usr/lib/perl5/site_perl/5.005/Apache/ASP.pm line 818
>
> Compile Error
>
>
> /* Connection Pooler */: ?+*{} follows nothing in regexp at (eval 204)
> line 1660.
>
>
> ASP to Perl Program
>
>   1: package
> Apache::ASP::Compiles::_users_admin_public_html_dbeat_gbook_ViewEn
> trySummaries_asp____INLINE;
>
>   2: no strict;
>   3: use vars qw($Application $Session $Response $Server $Request);
>   4:
>   5: # allow developers to place modules in global directory
>   6: use lib qw(/users/admin/public_html/dbeat/gbook/.);
>   7:
>   8: # aliases here
>   9: sub exit { $main::Response->End(); }
>  10:
>  11: # handler gets called from ASP perl handler to run code
>  12: sub handler {
>  13:   my($self, $routine) = @_;
>  14:
>  15:   if($routine && ($routine ne "handler")) {
>  16:     return &$routine;
>  17:   }
>  18:   $self = $routine = undef;
>  19:   @_ = ();
>  20:
>  21: #######################################################
>  22: ## Your ASP script has been parsed and inserted here !!
>  23: #######################################################
>  24:
>  25:
>  26: $main::Response->Write(
>  27: '
>  28:
>  29: <SCRIPT LANGUAGE=JavaScript RUNAT=Server>
>  30: function ConnectionCache()
>  31: {
>  32:    CPReconnect(this);
>  33:
>  34:    // create connections array
>  35:    if(!this.Connections)
>  36:    {
>  37:            this.Connections = new Array();
>  38:    }
>  39:
>  40:    return this;
>  41: }
>  42:
>  43: function CPReconnect(Object)
>  44: {
>  45:    Object.FindConnection = CPFindConnection;
>  46:    Object.AddConnection = CPAddConnection;
>  47: }
>  48:
>  49: function CPFindConnection(DSN, UID, PWD)
>  50: {
>  51:    var Connections = this.Connections;
>  52:    for(var i = 0, n = Connections.length; i < n; i++)
>  53:    {
>  54:            TestPair = Connections[i];
>  55:            TestKey = TestPair["Key"];
>  56:            if(TestKey["DSN"] != DSN || TestKey["UID"] != UID ||
> TestKey["PWD"] != PWD)
>  57:            {
>  58:                    continue;
>  59:            }
>  60:            return TestPair["Value"];
>  61:    }
>  62:    return null;
>  63: }
>  64:
>  65: function CPAddConnection(DSN, UID, PWD, Connection)
>  66: {
>  67:    var Pair = new Object();
>  68:    var Key = new Object();
>  69:    Key["DSN"] = DSN;
>  70:    Key["UID"] = UID;
>  71:    Key["PWD"] = PWD;
>  72:    Pair["Key"] = Key;
>  73:    Pair["Value"] = Connection;
>  74:    var Connections = this.Connections;
>  75:    Connections[Connections.length] = Pair;
>  76: }
>  77:
>  78: function CreateConnectionCache()
>  79: {
>  80:    return new ConnectionCache();
>  81: }
>  82:
>  83: </SCRIPT>
>  84: <SCRIPT LANGUAGE=JavaScript RUNAT=Server>
>  85: function Recordset(Name, DSN, UID, PWD, SQL, UniqueKeyCols,
> Updateable, CursorType, CursorLocation, LockType, TableNames)
>  86: {
>  87:    RSReconnect(this);
>  88:    this.Name = Name;
>  89:    this.DSN = DSN;
>  90:    this.UID = UID;
>  91:    this.PWD = PWD;
>  92:    this.SQL = SQL;
>  93:    this.OrgSQL = SQL;
>  94:    this.Updateable = Updateable;
>  95:    this.CursorType = CursorType;
>  96:    this.CursorLocation = CursorLocation;
>  97:    this.LockType = LockType;
>  98:    this.NoRecordMessage = "";
>  99:    this.NoFoundMessage = "";
> 100:    this.RSConnection = "";
> 101:    this.DTFormat = 0;
> 102:    this.FilterCriteria = "";
> 103:    this.OrderByCol = "";
> 104:    this.Found = true;
> 105:    this.SupportsApproxPosition = false;
> 106:    this.SupportsMove = false;
> 107:    this.SupportsCount = false;
> 108:    this.ApproxPosition = 1;
> 109:    this.Separator = "!*+";
> 110:    this.SpecialChars =
> "~@#$%^&*-+=\\\\}{\\"\';:?/><,()_\\f\\n\\r\\t ";
> 111:    this.TrimCRLF = true;
> 112:    this.bPreserveInputState = false;
> 113:    this.Action = "" + Request(this.Name+"_Action");
> 114:    this.MaxRecords = -1;
> 115:
> 116:    // create bindings array
> 117:    if("" + Request(this.Name + "_Bindings") != "undefined")
> 118:    {
> 119:            this.BindingsArray = new Array();
> 120:            var Bindings = "" + Request(this.Name + "_Bindings");
> 121:            var nBinding = 0;
> 122:            for(;;)
> 123:            {
> 124:                    var BindIndex =
> Bindings.indexOf(this.Separator);
> 125:                    if(BindIndex >= 0)
> 126:                    {
> 127:                            var BoundColumn = Bindings.substring(0,
> BindIndex);
> 128:                            Bindings = Bindings.substring(BindIndex
> + this.Separator.length, Bindings.length);
> 129:                            BindIndex =
> Bindings.indexOf(this.Separator);
> 130:                            if(BindIndex >= 0)
> 131:                            {
> 132:                                    // get the location of the value
>
> 133:                                    var BindingType =
> Bindings.substring(0, BindIndex);
> 134:                                    Bindings =
> Bindings.substring(BindIndex + this.Separator.length, Bindings.length);
> 135:
> 136:                                    // get the value
> 137:                                    BindIndex =
> Bindings.indexOf(this.Separator);
> 138:                                    if(BindIndex < 0)
> 139:                                    {
> 140:                                            BindIndex =
> Bindings.length;
> 141:                                    }
> 142:                                    var BoundValue =
> Bindings.substring(0, BindIndex);
> 143:
> 144:                                    var Binding = new Object();
> 145:                                    Binding["Name"] = BoundColumn;
> 146:                                    Binding["Type"] = BindingType;
> 147:                                    Binding["Value"] = BoundValue;
> 148:                                    this.BindingsArray[nBinding] =
> Binding;
> 149:                                    nBinding++;
> 150:
> 151:                                    // next binding
> 152:                                    if(BindIndex == Bindings.length)
>
> 153:                                    {
> 154:                                            BindIndex = -1;
> 155:                                    }
> 156:                                    else
> 157:                                    {
> 158:                                            Bindings =
> Bindings.substring(BindIndex + this.Separator.length, Bindings.length);
> 159:                                    }
> 160:                            }
> 161:                    }
> 162:                    if(BindIndex < 0)
> 163:                    {
> 164:                            break;
> 165:                    }
> 166:            }
> 167:    }
> 168:
> 169:    // set or restore parameters
> 170:    this.State = "" + Request(this.Name + "_Position");
> 171:    if(this.State != "undefined")
> 172:    {
> 173:            var State = this.State;
> 174:            if(State != "")
> 175:            {
> 176:                    var FilterIndex = State.indexOf("FIL:");
> 177:                    var OrdIndex = State.indexOf("ORD:");
> 178:                    var AbsIndex = State.indexOf("ABS:");
> 179:                    var ParamIndex = State.indexOf("PAR:");
> 180:                    if(FilterIndex >= 0 && OrdIndex >= 0)
> 181:                    {
> 182:                            this.FilterCriteria =
> State.substring(FilterIndex + 4, OrdIndex);
> 183:                    }
> 184:                    if(OrdIndex >= 0 && AbsIndex >= 0)
> 185:                    {
> 186:                            this.OrderByCol =
> State.substring(OrdIndex + 4, AbsIndex);
> 187:                    }
> 188:                    if(ParamIndex >= 0)
> 189:                    {
> 190:
> this.RestoreParams(State.substring(ParamIndex + 4, State.length));
> 191:                    }
> 192:            }
> 193:    }
> 194:    if(this.ParamArray == null && Recordset.arguments.length >
> Recordset.length)
> 195:    {
> 196:            // set default parameters (variable arguments to this
> function)
> 197:            this.ParamArray = new Array();
> 198:            var nArgs = Recordset.arguments.length;
> 199:            var nArg = Recordset.length;
> 200:            var nParam = 0;
> 201:            for(; nArg < nArgs; nArg++, nParam++)
> 202:            {
> 203:                    var ParmName = "" + Recordset.arguments[nArg];
> 204:                    nArg++;
> 205:                    if(nArg >= nArgs)
> 206:                    {
> 207:                            break;
> 208:                    }
> 209:                    var ParmValue = "" + Recordset.arguments[nArg];
> 210:                    var Pair = new Object();
> 211:                    Pair["Name"] = ParmName;
> 212:                    Pair["Value"] = ParmValue;
> 213:                    this.ParamArray[nParam] = Pair;
> 214:            }
> 215:    }
> 216:
> 217:    // create unique key cols array
> 218:    if(UniqueKeyCols != "")
> 219:    {
> 220:            this.UniqueKeyColArray = new Array();
> 221:            var Temp = UniqueKeyCols;
> 222:            for(i = 0;;i++)
> 223:            {
> 224:                    var Index = Temp.indexOf(",");
> 225:                    if(Index == -1)
> 226:                    {
> 227:                            Index = Temp.length;
> 228:                    }
> 229:                    this.UniqueKeyColArray[i] = Temp.substring(0,
> Index);
> 230:                    if(Index == Temp.length)
> 231:                    {
> 232:                            break;
> 233:                    }
> 234:                    Temp = Temp.substring(Index + 1, Temp.length);
> 235:            }
> 236:    }
> 237:
> 238:    // create table names array
> 239:    if(TableNames != "")
> 240:    {
> 241:            this.TableNamesArray = new Array();
> 242:            var nTableName = 0;
> 243:            for(;;)
> 244:            {
> 245:                    var TableNameIndex =
> TableNames.indexOf(this.Separator);
> 246:                    if(TableNameIndex >= 0)
> 247:                    {
> 248:                            // get the column index
> 249:                            var nCol =
> parseInt(TableNames.substring(0, TableNameIndex));
> 250:                            TableNames =
> TableNames.substring(TableNameIndex + this.Separator.length,
> TableNames.length);
> 251:                            // get the column name
> 252:                            TableNameIndex =
> TableNames.indexOf(this.Separator);
> 253:                            if(TableNameIndex < 0)
> 254:                            {
> 255:                                    TableNameIndex =
> TableNames.length;
> 256:                            }
> 257:                            var TableName = TableNames.substring(0,
> TableNameIndex);
> 258:                            var TableNameObj = new Object();
> 259:                            TableNameObj["nCol"] = nCol;
> 260:                            TableNameObj["TableName"] = TableName;
> 261:                            this.TableNamesArray[nTableName] =
> TableNameObj;
> 262:                            nTableName++;
> 263:
> 264:                            // next TableName
> 265:                            if(TableNameIndex == TableNames.length)
> 266:                            {
> 267:                                    TableNameIndex = -1;
> 268:                            }
> 269:                            else
> 270:                            {
> 271:                                    TableNames =
> TableNames.substring(TableNameIndex + this.Separator.length,
> TableNames.length);
> 272:                            }
> 273:                    }
> 274:                    if(TableNameIndex < 0)
> 275:                    {
> 276:                            break;
> 277:                    }
> 278:            }
> 279:    }
> 280:    return this;
> 281: }
> 282:
> 283: function RSReconnect(Object)
> 284: {
> 285:    Object.FindConnection = RSFindConnection;
> 286:    Object.AddConnection = RSAddConnection;
> 287:    Object.Open = RSOpen;
> 288:    Object.GetColumnValue = RSGetColumnValue;
> 289:    Object.SetColumnValue = RSSetColumnValue;
> 290:    Object.ProcessAction = RSProcessAction;
> 291:    Object.MoveFirst = RSMoveFirst;
> 292:    Object.MoveNext = RSMoveNext;
> 293:    Object.MovePrevious = RSMovePrevious;
> 294:    Object.MoveLast = RSMoveLast;
> 295:    Object.Insert = RSInsert;
> 296:    Object.Update = RSUpdate;
> 297:    Object.Delete = RSDelete;
> 298:    Object.IsBOF = RSIsBOF;
> 299:    Object.IsEOF = RSIsEOF;
> 300:    Object.BeginTrans = RSBeginTrans;
> 301:    Object.CommitTrans = RSCommitTrans;
> 302:    Object.RollbackTrans = RSRollbackTrans;
> 303:    Object.Close = RSClose;
> 304:    Object.Filter = RSFilter;
> 305:    Object.Find = RSFind;
> 306:    Object.GetState = RSGetState;
> 307:    Object.RestoreState = RSRestoreState;
> 308:    Object.GetKeyVals = RSGetKeyVals;
> 309:    Object.GetAbsPos = RSGetAbsPos;
> 310:    Object.OrderBy = RSOrderBy;
> 311:    Object.SetMessages = RSSetMessages;
> 312:    Object.SetAction = RSSetAction;
> 313:    Object.SetOrderByCol = RSSetOrderByCol;
> 314:    Object.GetOrderbyCol = RSGetOrderByCol;
> 315:    Object.Move = RSMove;
> 316:    Object.SetParameter = RSSetParam;
> 317:    Object.GetParameter = RSGetParam;
> 318:    Object.GetParams = RSGetParams;
> 319:    Object.RestoreParams = RSRestoreParams;
> 320:    Object.SubstituteParams = RSSubstituteParams;
> 321:    Object.SetMaxRecords = RSSetMaxRecords;
> 322:    Object.GetMaxRecords = RSGetMaxRecords;
> 323:    Object.FindBinding = RSFindBinding;
> 324:    Object.AddBinding = RSAddBinding;
> 325:    Object.RemoveBinding = RSRemoveBinding;
> 326:    Object.GetBindingValue = RSGetBindingValue;
> 327:    Object.SetBindingValue = RSSetBindingValue;
> 328:    Object.GetBindingType = RSGetBindingType;
> 329:    Object.SetBindingType = RSSetBindingType;
> 330:    Object.GetBoundColumnName = RSGetBoundColumnName;
> 331:    Object.GetBoundColumnNameByIndex = RSGetBoundColumnNameByIndex;
> 332:    Object.SetRS = RSSetRS;
> 333:    Object.GetField = RSGetField;
> 334: }
> 335:
> 336: function RSSetRS(RS)
> 337: {
> 338:    if(RS)
> 339:    {
> 340:            this.RS = RS;
> 341:    }
> 342: }
> 343:
> 344: function RSGetField(ColName)
> 345: {
> 346:    var Field = null;
> 347:    if(this.TableNamesArray == null)
> 348:    {
> 349:            Field = this.RS.Fields.Item(ColName);
> 350:    }
> 351:    else
> 352:    {
> 353:            // column not found in Fields collection, so look for
> table.column
> 354:            var nDot = ColName.indexOf(".");
> 355:            if(nDot > 0)
> 356:            {
> 357:                    var RSTable = ColName.substring(0, nDot);
> 358:                    var RSColumn = ColName.substring(nDot + 1,
> ColName.length);
> 359:                    for(var i = 0, n = this.TableNamesArray.length;
> i < n; i++)
> 360:                    {
> 361:                            var TObj = this.TableNamesArray[i];
> 362:                            var TableName = TObj["TableName"];
> 363:                            if(TableName == RSTable)
> 364:                            {
> 365:                                    var nCol = TObj["nCol"];
> 366:
> if(this.RS.Fields.Item(nCol).Name == RSColumn)
> 367:                                    {
> 368:                                            Field =
> this.RS.Fields.Item(nCol);
> 369:                                            break;
> 370:                                    }
> 371:                            }
> 372:                    }
> 373:
> 374:                    // column not found in Fields collection, so
> look for user.table.column
> 375:                    nDot = RSColumn.indexOf(".");
> 376:                    if(nDot > 0)
> 377:                    {
> 378:                            var RSTbl = RSTable + "." +
> RSColumn.substring(0, nDot);
> 379:                            var RSCol = RSColumn.substring(nDot + 1,
> RSColumn.length);
> 380:                            for(var i = 0, n =
> this.TableNamesArray.length; i < n; i++)
> 381:                            {
> 382:                                    var TObj =
> this.TableNamesArray[i];
> 383:                                    var TableName =
> TObj["TableName"];
> 384:                                    if(TableName == RSTbl)
> 385:                                    {
> 386:                                            var nCol = TObj["nCol"];
>
> 387:
> if(this.RS.Fields.Item(nCol).Name == RSCol)
> 388:                                            {
> 389:                                                    Field =
> this.RS.Fields.Item(nCol);
> 390:                                                    break;
> 391:                                            }
> 392:                                    }
> 393:                            }
> 394:                    }
> 395:                    else
> 396:                    {
> 397:                            Field = this.RS.Fields.Item(RSColumn);
> 398:                    }
> 399:            }
> 400:            else
> 401:            {
> 402:                    Field = this.RS.Fields.Item(ColName);
> 403:            }
> 404:    }
> 405:    return Field;
> 406: }
> 407:
> 408: function RSFindConnection(DSN, UID, PWD)
> 409: {
> 410:    var Connections = ConnectionCache.Connections;
> 411:    for(var i = 0, n = Connections.length; i < n; i++)
> 412:    {
> 413:            TestPair = Connections[i];
> 414:            TestKey = TestPair["Key"];
> 415:            if(TestKey["DSN"] != DSN || TestKey["UID"] != UID ||
> TestKey["PWD"] != PWD)
> 416:            {
> 417:                    continue;
> 418:            }
> 419:            return TestPair["Value"];
> 420:    }
> 421:    return null;
> 422: }
> 423:
> 424: function RSAddConnection(DSN, UID, PWD, Connection)
> 425: {
> 426:    var Pair = new Object();
> 427:    var Key = new Object();
> 428:    Key["DSN"] = DSN;
> 429:    Key["UID"] = UID;
> 430:    Key["PWD"] = PWD;
> 431:    Pair["Key"] = Key;
> 432:    Pair["Value"] = Connection;
> 433:    var Connections = ConnectionCache.Connections;
> 434:    Connections[Connections.length] = Pair;
> 435: }
> 436:
> 437: function RSOpen()
> 438: {
> 439:    this.RSConnection = this.FindConnection(this.DSN, this.UID,
> this.PWD);
> 440:    if(this.RSConnection == null)
> 441:    {
> 442:            this.RSConnection =
> Server.CreateObject("ADODB.Connection");
> 443:            this.AddConnection(this.DSN, this.UID, this.PWD,
> this.RSConnection);
> 444:    }
> 445:    if(this.RSConnection)
> 446:    {
> 447:            if(!(this.RSConnection.State & 1/*adStateOpen*/))
> 448:            {
> 449:                    this.RSConnection.Open("dsn=" + this.DSN +
> ";uid=" + this.UID + ";pwd=" + this.PWD);
> 450:            }
> 451:            this.RS = Server.CreateObject("ADODB.Recordset");
> 452:            if(this.RS)
> 453:            {
> 454:                    if (this.MaxRecords != -1)
> 455:                    {
> 456:                            this.RS.MaxRecords = this.MaxRecords;
> 457:                    }
> 458:                    var version =
> parseFloat(this.RSConnection.Version);
> 459:                    if (version > 1.0)
> 460:                    {
> 461:                            this.RS.CursorLocation =
> this.CursorLocation;
> 462:                    }
> 463:
> 464:                    var SQL = this.SQL;
> 465:                    if(this.OrderByCol != "")
> 466:                    {
> 467:                            SQL += " ORDER BY " + this.OrderByCol;
> 468:                    }
> 469:                    if(this.ParamArray != null &&
> this.ParamArray.length > 0)
> 470:                    {
> 471:                            // substitute parameters
> 472:                            SQL = this.SubstituteParams(SQL);
> 473:                    }
> 474:
> 475:                    this.RS.Open(SQL, this.RSConnection,
> this.CursorType, this.LockType);
> 476:                    if (this.RS.State == 1/*adStateOpen*/)
> 477:                    {
> 478:                            this.SupportsApproxPosition =
> this.RS.Supports(0x4000/*adApproxPosition*/);
> 479:                            this.SupportsMove =
> this.RS.Supports(0x200/*adMovePrevious*/);
> 480:                            this.SupportsCount = this.RS.RecordCount
> != -1;
> 481:                            this.RestoreState();
> 482:                    }
> 483:                    else
> 484:                    {
> 485:                            Response.Write("<BR>Error: Unable to
> open Recordset!<BR>");
> 486:                    }
> 487:            }
> 488:    }
> 489: }
> 490:
> 491: function RSSetAction(action)
> 492: {
> 493:    this.Action = "" + action;
> 494: }
> 495:
> 496: function RSSetOrderByCol(OrderByCol)
> 497: {
> 498:    this.OrderByCol = OrderByCol;
> 499: }
> 500:
> 501: function RSGetOrderByCol()
> 502: {
> 503:    return this.OrderByCol;
> 504: }
> 505:
> 506: function RSRestoreState()
> 507: {
> 508:    var Action = this.Action;
> 509:    if(Action != \'Insert\' && Action != \'Close\' &&
> Action.indexOf(\'Filter(\') < 0)
> 510:    {
> 511:            if(this.State != "undefined")
> 512:            {
> 513:                    var Position = this.State;
> 514:                    var FilterIndex = Position.indexOf("FIL:");
> 515:                    var OrdIndex = Position.indexOf("ORD:");
> 516:                    var AbsIndex = Position.indexOf("ABS:");
> 517:                    var KeyIndex = Position.indexOf("KEY:");
> 518:                    var ParamIndex = Position.indexOf("PAR:");
> 519:                    if(ParamIndex < 0)
> 520:                    {
> 521:                            ParamIndex = Position.length;
> 522:                    }
> 523:
> 524:                    // reapply filter
> 525:                    if(this.FilterCriteria != "")
> 526:                    {
> 527:                            this.Filter(this.FilterCriteria);
> 528:                    }
> 529:
> 530:                    //if the filter produces an empty recordset ,
> return
> 531:                    if (this.IsEOF())
> 532:                    {
> 533:                            return -1;
> 534:                    }
> 535:
> 536:                    // move to previous position
> 537:                    if(KeyIndex >= 0 && AbsIndex >= 0)
> 538:                    {
> 539:                            var Abs = Position.substring(AbsIndex +
> 4, KeyIndex);
> 540:                            var Key = "";
> 541:                            if((KeyIndex + 4) < ParamIndex)
> 542:                            {
> 543:                                    Key =
> Position.substring(KeyIndex + 4, ParamIndex);
> 544:                            }
> 545:
> 546:                            // build array of unique keys
> 547:                            var KeyArray = null;
> 548:                            if(this.UniqueKeyColArray != null && Key
> != "")
> 549:                            {
> 550:                                    KeyArray = new Array();
> 551:                                    for(i = 0;; i++)
> 552:                                    {
> 553:                                            var Index =
> Key.indexOf(this.Separator);
> 554:                                            if(Index == -1)
> 555:                                            {
> 556:                                                    Index =
> Key.length;
> 557:                                            }
> 558:                                            KeyArray[i] =
> Key.substring(0, Index);
> 559:                                            if(Index == Key.length)
> 560:                                            {
> 561:                                                    break;
> 562:                                            }
> 563:                                            Key =
> Key.substring(Index + 3, Key.length);
> 564:                                    }
> 565:                            }
> 566:
> 567:                            if(this.SupportsApproxPosition == true)
> 568:                            {
> 569:                                    if(Abs != "")
> 570:                                    {
> 571:                                            if(Abs == "BOF")
> 572:                                            {
> 573:
> this.RS.MovePrevious();
> 574:                                            }
> 575:                                            else if(Abs == "EOF")
> 576:                                            {
> 577:
> this.RS.MoveLast();
> 578:
> this.RS.MoveNext();
> 579:                                            }
> 580:                                            else
> 581:                                            {
> 582:                                                    if(Abs != "MTY")
> // was empty
> 583:                                                    {
> 584:
> this.RS.Move(parseInt(Abs) - 1);
> 585:                                                    }
> 586:                                            }
> 587:                                    }
> 588:                                    if(Key != "")
> 589:                                    {
> 590:                                            // fan out from current
> position looking for key
> 591:
> if(this.UniqueKeyColArray.length == KeyArray.length)
> 592:                                            {
> 593:                                                    var GotBOF =
> false;
> 594:                                                    var GotEOF =
> false;
> 595:                                                    var Direction =
> -1;
> 596:                                                    var Count = 1;
> 597:                                                    var n =
> this.UniqueKeyColArray.length;
> 598:                                                    for(;;)
> 599:                                                    {
> 600:                                                            // test
> for match to key
> 601:
> this.Found = true;
> 602:                                                            for(i =
> 0; i < n; i++)
> 603:                                                            {
> 604:
> if(String(this.GetField(this.UniqueKeyColArray[i]).Value) !=
> String(KeyArray[i]))
> 605:
> {
> 606:
> this.Found = false;
> 607:
> break;
> 608:
> }
> 609:                                                            }
> 610:
> if(this.Found == false)
> 611:                                                            {
> 612:
> // key mismatch
> 613:
> if(Direction < 0)
> 614:
> {
> 615:
> if(GotBOF == false)
> 616:
> {
> 617:
> this.RS.Move(Count * Direction);
> 618:
> if(GotEOF == false)
> 619:
> {
> 620:
> Direction *= -1;
> 621:
> }
> 622:
> if(this.RS.BOF)
> 623:
> {
> 624:
> GotBOF = true;
> 625:
> if(!GotEOF)
> 626:
> {
> 627:
> this.RS.MoveNext();
> 628:
> this.RS.Move(Count);
> 629:
> Count = 1;
> 630:
> if(this.RS.EOF)
> 631:
> {
> 632:
> GotEOF = true;
> 633:
> }
> 634:
> }
> 635:
> }
> 636:
> else if(GotEOF == false)
> 637:
> {
> 638:
> Count++;
> 639:
> }
> 640:
> }
> 641:
> }
> 642:
> else
> 643:
> {
> 644:
> if(GotEOF == false)
> 645:
> {
> 646:
> this.RS.Move(Count * Direction);
> 647:
> if(GotBOF == false)
> 648:
> {
> 649:
> Direction *= -1;
> 650:
> }
> 651:
> if(this.RS.EOF)
> 652:
> {
> 653:
> GotEOF = true;
> 654:
> if(!GotBOF)
> 655:
> {
> 656:
> this.RS.MovePrevious();
> 657:
> this.RS.Move(-Count);
> 658:
> Count = 1;
> 659:
> if(this.RS.BOF)
> 660:
> {
> 661:
> GotBOF = true;
> 662:
> }
> 663:
> }
> 664:
> }
> 665:
> else if(GotBOF == false)
> 666:
> {
> 667:
> Count++;
> 668:
> }
> 669:
> }
> 670:
> }
> 671:                                                            }
> 672:
> if(GotBOF == true && GotEOF == true)
> 673:                                                            {
> 674:
> // key not found so move to abs position
> 675:
> if(this.RS.BOF)
> 676:
> {
> 677:
> this.RS.MoveNext();
> 678:
> }
> 679:
> else
> 680:
> {
> 681:
> this.RS.MoveFirst();
> 682:
> }
> 683:
> if(Abs != "")
> 684:
> {
> 685:
> if(Abs == "BOF")
> 686:
> {
> 687:
> this.RS.MovePrevious();
> 688:
> }
> 689:
> else if(Abs == "EOF")
> 690:
> {
> 691:
> this.RS.MoveLast();
> 692:
> this.RS.MoveNext();
> 693:
> }
> 694:
> else
> 695:
> {
> 696:
> var Increment = 1;
> 697:
> var Action = this.Action;
> 698:
> if(Action == \'Previous\')
> 699:
> {
> 700:
> if(Direction == 1)
> 701:
> {
> 702:
> Increment--;
> 703:
> }
> 704:
> }
> 705:
> else if(Action == \'Next\')
> 706:
> {
> 707:
> if(Direction == -1)
> 708:
> {
> 709:
> Increment++;
> 710:
> }
> 711:
> }
> 712:
> 713:
> this.RS.Move(parseInt(Abs) - Increment);
> 714:
> }
> 715:
> }
> 716:
> break;
> 717:                                                            }
> 718:
> if(this.Found == true)
> 719:                                                            {
> 720:
> break;
> 721:                                                            }
> 722:                                                    }
> 723:                                            }
> 724:                                    }
> 725:                            }
> 726:                            else // SupportsApproxPosition == false
> 727:                            {
> 728:                                    if(KeyArray != null)
> 729:                                    {
> 730:                                            // move forward through
> recordset until key is found
> 731:                                            while(!this.IsEOF())
> 732:                                            {
> 733:                                                    var n =
> this.UniqueKeyColArray.length;
> 734:                                                    this.Found =
> true;
> 735:                                                    for(i = 0; i <
> n; i++)
> 736:                                                    {
> 737:
> if(String(this.GetField(this.UniqueKeyColArray[i]).Value) !=
> String(KeyArray[i]))
> 738:                                                            {
> 739:
> this.Found = false;
> 740:
> break;
> 741:                                                            }
> 742:                                                    }
> 743:                                                    if(this.Found)
> 744:                                                    {
> 745:                                                            break;
> 746:                                                    }
> 747:                                                    else
> 748:                                                    {
> 749:
> this.MoveNext();
> 750:                                                    }
> 751:                                            }
> 752:
> 753:                                    }
> 754:                                    else if(Abs != "" && Abs !=
> "MTY")
> 755:                                    {
> 756:                                            // move forward through
> recordset until approx position is found
> 757:                                            if(this.SupportsMove)
> 758:                                            {
> 759:
> this.RS.Move(parseInt(Abs) - 1);
> 760:
> this.ApproxPosition = Abs;
> 761:                                            }
> 762:                                            else
> 763:                                            {
> 764:                                                    Abs =
> parseInt(Abs);
> 765:
> this.ApproxPosition = 1;
> 766:
> while(this.ApproxPosition != Abs)
> 767:                                                    {
> 768:
> this.RS.MoveNext();
> 769:
> this.ApproxPosition++;
> 770:                                                    }
> 771:                                            }
> 772:                                    }
> 773:                            }
> 774:                    }
> 775:            }
> 776:    }
> 777: }
> 778:
> 779: function RSGetState()
> 780: {
> 781:    if (this.bPreserveInputState)
> 782:    {
> 783:            return this.State;
> 784:    }
> 785:
> 786:    return "FIL:" + this.FilterCriteria + "ORD:" + this.OrderByCol +
> "ABS:" + this.GetAbsPos() + "KEY:" + this.GetKeyVals() + "PAR:" +
> this.GetParams();
> 787: }
> 788:
> 789:
> 790: function RSGetMaxRecords()
> 791: {
> 792:    return this.RS.MaxRecords;
> 793: }
> 794:
> 795: function RSSetMaxRecords(lMaxRecords)
> 796: {
> 797:    this.MaxRecords = lMaxRecords;
> 798:    this.RS.MaxRecords = lMaxRecords;
> 799: }
> 800:
> 801: function RSGetKeyVals()
> 802: {
> 803:    var KeyVals = "";
> 804:    if(this.UniqueKeyColArray != null)
> 805:    {
> 806:            var n = this.UniqueKeyColArray.length;
> 807:            if(n > 0)
> 808:            {
> 809:                    var First = true;
> 810:                    for(i = 0; i < n; i++)
> 811:                    {
> 812:                            if(First == true)
> 813:                            {
> 814:                                    First = false;
> 815:                            }
> 816:                            else
> 817:                            {
> 818:                                    KeyVals += this.Separator;
> 819:                            }
> 820:                            if(!this.IsBOF() && !this.IsEOF())
> 821:                            {
> 822:                                    var Field =
> this.GetField(this.UniqueKeyColArray[i]);
> 823:                                    if(Field != null)
> 824:                                    {
> 825:                                            KeyVals +=
> String(Field.Value);
> 826:                                    }
> 827:                            }
> 828:                    }
> 829:            }
> 830:    }
> 831:    return KeyVals;
> 832: }
> 833:
> 834: function RSGetAbsPos()
> 835: {
> 836:    var AbsPos = "";
> 837:    if ((this.RS.State == 0/*adStateClosded*/)||(this.IsBOF() &&
> this.IsEOF()))
> 838:    {
> 839:            AbsPos = "MTY"; // empty result set
> 840:    }
> 841:    else
> 842:    {
> 843:            if(this.SupportsApproxPosition)
> 844:            {
> 845:                    var nAbsPos = this.RS.AbsolutePosition;
> 846:                    if(nAbsPos == -2/*adPosBOF*/)
> 847:                    {
> 848:                            AbsPos += "BOF";
> 849:                    }
> 850:                    else if(nAbsPos == -3)
> 851:                    {
> 852:                            AbsPos += "EOF";
> 853:                    }
> 854:                    else
> 855:                    {
> 856:                            AbsPos += nAbsPos;
> 857:                    }
> 858:            }
> 859:            else
> 860:            {
> 861:                    AbsPos += this.ApproxPosition;
> 862:            }
> 863:    }
> 864:    return AbsPos;
> 865: }
> 866:
> 867: function RSGetParams()
> 868: {
> 869:    var Params = "";
> 870:    if(this.ParamArray != null)
> 871:    {
> 872:            var n = this.ParamArray.length;
> 873:            if(n > 0)
> 874:            {
> 875:                    var First = true;
> 876:                    for(i = 0; i < n; i++)
> 877:                    {
> 878:                            if(First == true)
> 879:                            {
> 880:                                    First = false;
> 881:                            }
> 882:                            else
> 883:                            {
> 884:                                    Params += this.Separator;
> 885:                            }
> 886:                            Pair = this.ParamArray[i];
> 887:                            Params += Pair["Name"];
> 888:                            Params += "=";
> 889:                            Params += Pair["Value"];
> 890:                    }
> 891:            }
> 892:    }
> 893:    return Params;
> 894: }
> 895:
> 896: function RSGetColumnValue(ColName)
> 897: {
> 898:    if(this.IsBOF() || this.IsEOF())
> 899:    {
> 900:            var Action = "" + this.Action;
> 901:            if ((Action == "Previous") || (Action == "Next"))
> 902:            {
> 903:                    return this.NoRecordMessage;
> 904:            }
> 905:            else
> 906:            {
> 907:                    return this.NoFoundMessage
> 908:            }
> 909:    }
> 910:    var Field = this.GetField(ColName);
> 911:    if(Field != null)
> 912:    {
> 913:            if(this.DTFormat >= 0)
> 914:            {
> 915:                    var ColType = Field.Type;
> 916:                    switch(ColType)
> 917:                    {
> 918:                            case 7:         /*adDate*/
> 919:                            case 133:       /*adDBDate*/
> 920:                            case 134:       /*adDBTime*/
> 921:                            case 135:       /*adDBTimeStamp*/
> 922:                                    return
> RSFormatDateTime(Field.Value, this.DTFormat);
> 923:                            default:
> 924:                                    break;
> 925:                    }
> 926:            }
> 927:            return Field.Value;
> 928:    }
> 929:    return "";
> 930: }
> 931:
> 932: function RSSetColumnValue(ColName, Val)
> 933: {
> 934:    if(!this.IsBOF() && !this.IsEOF())
> 935:    {
> 936:            var Field = this.GetField(ColName);
> 937:            if(Field != null)
> 938:            {
> 939:                    Field.Value = Val;
> 940:            }
> 941:    }
> 942: }
> 943:
> 944: function RSProcessAction()
> 945: {
> 946:    var Action = this.Action;
> 947:    if(Action.indexOf(\'Find(\') == 0)
> 948:    {
> 949:            eval(this.Name + \'.\' + Action);
> 950:    }
> 951:    else if(Action.indexOf(\'Filter(\') == 0)
> 952:    {
> 953:            eval(this.Name + \'.\' + Action);
> 954:    }
> 955:    else
> 956:    {
> 957:            Action = "" + this.Action;
> 958:            if(Action == \'First\')
> 959:            {
> 960:                    this.MoveFirst();
> 961:            }
> 962:            else if (Action == \'Previous\')
> 963:            {
> 964:                    this.MovePrevious();
> 965:            }
> 966:            else if (Action == \'Next\')
> 967:            {
> 968:                    this.MoveNext();
> 969:            }
> 970:            else if (Action == \'Last\')
> 971:            {
> 972:                    this.MoveLast();
> 973:            }
> 974:            else if (Action == \'Insert\')
> 975:            {
> 976:                    this.Insert();
> 977:            }
> 978:            else if(Action == \'Update\')
> 979:            {
> 980:                    this.Update();
> 981:            }
> 982:            else if(Action == \'Delete\')
> 983:            {
> 984:                    this.Delete();
> 985:            }
> 986:            else if(Action == \'Close\')
> 987:            {
> 988:                    this.Close();
> 989:            }
> 990:            else if(Action.indexOf(\'Sort\') == 0)
> 991:            {
> 992:                    this.OrderBy();
> 993:            }
> 994:            else if(Action.indexOf(\'OrderBy(\') == 0)
> 995:            {
> 996:                    eval(this.Name + \'.\' + Action);
> 997:            }
> 998:    }
> 999: }
> 1000:
> 1001: function RSSetMessages(NoRecordMessage, NoFoundMessage)
> 1002: {
> 1003:   this.NoRecordMessage = NoRecordMessage;
> 1004:   this.NoFoundMessage = NoFoundMessage;
> 1005: }
> 1006:
> 1007: function RSMoveFirst()
> 1008: {
> 1009:   if(this.RS.BOF)
> 1010:   {
> 1011:           if(!(this.RS.EOF))
> 1012:           {
> 1013:                   this.RS.MoveNext();
> 1014:           }
> 1015:   }
> 1016:   else
> 1017:   {
> 1018:           if(this.SupportsMove)
> 1019:           {
> 1020:                   this.RS.MoveFirst();
> 1021:           }
> 1022:           else
> 1023:           {
> 1024:                   this.RS.Requery();
> 1025:           }
> 1026:   }
> 1027:   this.ApproxPosition = 1;
> 1028: }
> 1029:
> 1030: function RSMoveNext()
> 1031: {
> 1032:   if(!(this.RS.EOF))
> 1033:   {
> 1034:           this.RS.MoveNext();
> 1035:           this.ApproxPosition++;
> 1036:   }
> 1037: }
> 1038:
> 1039: function RSMovePrevious()
> 1040: {
> 1041:   if(!(this.RS.BOF))
> 1042:   {
> 1043:           if(this.SupportsMove)
> 1044:           {
> 1045:                   this.RS.MovePrevious();
> 1046:                   this.ApproxPosition--;
> 1047:           }
> 1048:           else
> 1049:           {
> 1050:                   var ApproxPosition = this.ApproxPosition - 1;
> 1051:                   this.MoveFirst();
> 1052:                   while(this.ApproxPosition < ApproxPosition)
> 1053:                   {
> 1054:                           this.RS.MoveNext();
> 1055:                           this.ApproxPosition++;
> 1056:                   }
> 1057:           }
> 1058:   }
> 1059: }
> 1060:
> 1061: function RSMoveLast()
> 1062: {
> 1063:   if(this.RS.EOF)
> 1064:   {
> 1065:           this.MovePrevious();
> 1066:   }
> 1067:   else
> 1068:   {
> 1069:           if(this.SupportsMove && this.SupportsCount)
> 1070:           {
> 1071:                   this.RS.MoveLast();
> 1072:                   this.ApproxPosition = this.RS.RecordCount;
> 1073:           }
> 1074:           else
> 1075:           {
> 1076:                   if(this.SupportsCount)
> 1077:                   {
> 1078:                           var RecordCount = this.RS.RecordCount;
> 1079:                           if(RecordCount > 0)
> 1080:                           {
> 1081:                                   while(this.ApproxPosition <
> RecordCount)
> 1082:                                   {
> 1083:                                           this.RS.MoveNext();
> 1084:                                           this.ApproxPosition++;
> 1085:                                   }
> 1086:                           }
> 1087:                   }
> 1088:                   else
> 1089:                   {
> 1090:                           var LastRecord = 1;
> 1091:                           this.MoveFirst();
> 1092:                           while(!this.RS.EOF)
> 1093:                           {
> 1094:                                   this.RS.MoveNext();
> 1095:                                   LastRecord++;
> 1096:                           }
> 1097:                           LastRecord--;
> 1098:                           this.MoveFirst();
> 1099:                           while(this.ApproxPosition < LastRecord)
> 1100:                           {
> 1101:                                   this.MoveNext();
> 1102:                           }
> 1103:                   }
> 1104:           }
> 1105:   }
> 1106: }
> 1107:
> 1108:
> 1109: function RSMove(offset)
> 1110: {
> 1111:   if(this.SupportsApproxPosition)
> 1112:   {
> 1113:           this.RS.Move(offset);
> 1114:           this.ApproxPosition += offset;
> 1115:   }
> 1116:   else
> 1117:   {
> 1118:           if(offset > 0)
> 1119:           {
> 1120:                   while(offset > 0)
> 1121:                   {
> 1122:                           this.RS.MoveNext();
> 1123:                           this.ApproxPosition++;
> 1124:                           offset--;
> 1125:                           if(this.RS.EOF)
> 1126:                           {
> 1127:                                   break;
> 1128:                           }
> 1129:                   }
> 1130:           }
> 1131:           else
> 1132:           {
> 1133:                   var ApproxPosition = this.ApproxPosition -
> offset;
> 1134:                   if(ApproxPosition < 1)
> 1135:                   {
> 1136:                           ApproxPosition = 1;
> 1137:                   }
> 1138:                   this.MoveFirst();
> 1139:                   while(this.ApproxPosition < ApproxPosition)
> 1140:                   {
> 1141:                           this.RS.MoveNext();
> 1142:                           this.ApproxPosition++;
> 1143:                   }
> 1144:           }
> 1145:   }
> 1146: }
> 1147:
> 1148: function RSInsert()
> 1149: {
> 1150:   if(this.Updateable != false)
> 1151:   {
> 1152:           this.RS.AddNew();
> 1153:           this.Update();
> 1154:   }
> 1155: }
> 1156:
> 1157: function RSUpdate()
> 1158: {
> 1159:   if(this.Updateable == true && this.Found == true)
> 1160:   {
> 1161:           if(this.BindingsArray != null)
> 1162:           {
> 1163:                   var nBindings = this.BindingsArray.length;
> 1164:                   for(var nBinding = 0; nBinding < nBindings;
> nBinding++)
> 1165:                   {
> 1166:                           var Binding =
> this.BindingsArray[nBinding];
> 1167:                           var BoundColumn = Binding["Name"];
> 1168:                           var BindingType = Binding["Type"];
> 1169:                           var FormElement = null;
> 1170:                           var BoundValue = Binding["Value"];
> 1171:                           var DoUpdate = true;
> 1172:
> 1173:                           if(BindingType == "FRM") // form element
> name
> 1174:                           {
> 1175:                                   FormElement = BoundValue;
> 1176:                                   if(String(Request(FormElement))
> != "undefined")
> 1177:                                   {
> 1178:                                           BoundValue =
> Request(FormElement);
> 1179:                                   }
> 1180:                                   else
> 1181:                                   {
> 1182:                                           BoundValue = "";
> 1183:                                   }
> 1184:                           }
> 1185:                           else if(BindingType == "VAR") //
> javascript variable
> 1186:                           {
> 1187:                                   BoundValue = eval(BoundValue);
> 1188:                           }
> 1189:                           else if(BindingType != "VAL") // literal
> value
> 1190:                           {
> 1191:                                   DoUpdate = false;
> 1192:                           }
> 1193:
> 1194:                           // check whether new value is different
> from old value
> 1195:                           var Field = this.GetField(BoundColumn);
> 1196:                           if(Field != null && DoUpdate == true &&
> String(Field.Value) != String(BoundValue))
> 1197:                           {
> 1198:                                   // put the value into the column
>
> 1199:                                   if((String(BoundValue) == "") &&
> (Field.Attributes & 0x00000020/*adFldIsNullable*/))
> 1200:                                   {
> 1201:                                           Field.Value = null;
> 1202:                                   }
> 1203:                                   else if(FormElement != null &&
> String(Request(FormElement)) == "undefined")
> 1204:                                   {
> 1205:                                           // handle the unchecked
> state for checkbox control
> 1206:                                           if(Field.Type ==
> 11/*adBoolean*/)
> 1207:                                           {
> 1208:                                                   Field.Value =
> "0";
> 1209:                                           }
> 1210:                                   }
> 1211:                                   else
> 1212:                                   {
> 1213:                                           if(this.TrimCRLF ==
> true)
> 1214:                                           {
> 1215:                                                   var ColType =
> Field.Type;
> 1216:                                                   if(ColType ==
> 129/*adChar*/ ||
> 1217:                                                           ColType
> == 200/*adVarChar*/ ||
> 1218:                                                           ColType
> == 201/*adLongVarChar*/ ||
> 1219:                                                           ColType
> == 8/*adBSTR*/)
> 1220:                                                   {
> 1221:
> BoundValue = RSTrimCRLF(BoundValue);
> 1222:                                                   }
> 1223:                                           }
> 1224:                                           Field.Value =
> String(BoundValue);
> 1225:                                   }
> 1226:                           }
> 1227:                   }
> 1228:           }
> 1229:           this.RS.Update();
> 1230:   }
> 1231: }
> 1232:
> 1233: function RSDelete()
> 1234: {
> 1235:   if(this.Updateable == true && this.Found == true &&
> !this.IsEOF() && !this.IsBOF())
> 1236:   {
> 1237:           this.RS.Delete();
> 1238:           this.MoveNext();
> 1239:           if(this.IsEOF())
> 1240:           {
> 1241:                   this.MovePrevious();
> 1242:           }
> 1243:   }
> 1244: }
> 1245:
> 1246: function RSIsBOF()
> 1247: {
> 1248:   return this.RS.BOF;
> 1249: }
> 1250:
> 1251: function RSIsEOF()
> 1252: {
> 1253:   return this.RS.EOF;
> 1254: }
> 1255:
> 1256: function RSBeginTrans()
> 1257: {
> 1258:   this.RSConnection.BeginTrans();
> 1259: }
> 1260:
> 1261: function RSCommitTrans()
> 1262: {
> 1263:   this.RSConnection.CommitTrans();
> 1264: }
> 1265:
> 1266: function RSRollbackTrans()
> 1267: {
> 1268:   this.RSConnection.RollbackTrans();
> 1269: }
> 1270:
> 1271: function RSClose()
> 1272: {
> 1273:   this.RS.Close();
> 1274: }
> 1275:
> 1276: function RSFilter(Where)
> 1277: {
> 1278:   if(Where == null)
> 1279:   {
> 1280:           Where = "";
> 1281:   }
> 1282:
> 1283:   this.FilterCriteria = Where;
> 1284:   this.RS.Filter = Where;
> 1285: }
> 1286:
> 1287: function RSFind(ColumnName, Key)
> 1288: {
> 1289:
> 1290:   var nArgs = RSFind.arguments.length;
> 1291:   while(!this.IsEOF())
> 1292:   {
> 1293:           var nArg = 0;
> 1294:           var KeyValueFound = true;
> 1295:           for(; nArg < nArgs; nArg++)
> 1296:           {
> 1297:                   ColumnName = "" + RSFind.arguments[nArg];
> 1298:                   nArg++;
> 1299:                   var Key = "" + RSFind.arguments[nArg];
> 1300:                   if(String(this.GetField(ColumnName).Value) !=
> String(Key))
> 1301:                   {
> 1302:                           KeyValueFound = false;
> 1303:                           break;
> 1304:                   }
> 1305:           }
> 1306:           if(KeyValueFound)
> 1307:           {
> 1308:                   break;
> 1309:           }
> 1310:           else
> 1311:           {
> 1312:                   this.MoveNext();
> 1313:           }
> 1314:   }
> 1315: }
> 1316:
> 1317: function RSOrderBy(OrderByCol)
> 1318: {
> 1319:   if(OrderByCol != "")
> 1320:   {
> 1321:           this.SetOrderByCol(OrderByCol);
> 1322:           this.Close();
> 1323:           this.Open();
> 1324:   }
> 1325: }
> 1326:
> 1327: function RSSetParam(Name, Value)
> 1328: {
> 1329:   var Pair = null;
> 1330:   if(this.ParamArray == null)
> 1331:   {
> 1332:           this.ParamArray = new Array();
> 1333:   }
> 1334:   else
> 1335:   {
> 1336:           // find name
> 1337:           for(i = 0, n = this.ParamArray.length; i < n; i++)
> 1338:           {
> 1339:                   Target = this.ParamArray[i];
> 1340:                   if(Target["Name"] == Name)
> 1341:                   {
> 1342:                           Pair = Target;
> 1343:                           break;
> 1344:                   }
> 1345:           }
> 1346:   }
> 1347:   if(Pair == null)
> 1348:   {
> 1349:           // create new
> 1350:           Pair = new Object();
> 1351:           Pair["Name"] = Name;
> 1352:           this.ParamArray[this.ParamArray.length] = Pair;
> 1353:   }
> 1354:   Pair["Value"] = Value;
> 1355: }
> 1356:
> 1357: function RSRestoreParams(Params)
> 1358: {
> 1359:   if(Params != null && Params != "")
> 1360:   {
> 1361:           this.ParamArray = new Array();
> 1362:           for(i = 0;; i++)
> 1363:           {
> 1364:                   var Index = Params.indexOf(this.Separator);
> 1365:                   if(Index == -1)
> 1366:                   {
> 1367:                           Index = Params.length;
> 1368:                   }
> 1369:                   var NameValue = Params.substring(0, Index);
> 1370:                   var Pair = new Object();
> 1371:                   var Eq = NameValue.indexOf("=");
> 1372:                   Pair["Name"] = NameValue.substring(0, Eq);
> 1373:                   Pair["Value"] = NameValue.substring(Eq + 1,
> NameValue.length);
> 1374:                   this.ParamArray[i] = Pair;
> 1375:                   if(Index == Params.length)
> 1376:                   {
> 1377:                           break;
> 1378:                   }
> 1379:                   Params = Params.substring(Index + 3,
> Params.length);
> 1380:           }
> 1381:   }
> 1382: }
> 1383:
> 1384: function RSGetParam(Name)
> 1385: {
> 1386:   if(this.ParamArray == null)
> 1387:   {
> 1388:           return null;
> 1389:   }
> 1390:
> 1391:   // find name
> 1392:   for(i = 0, n = this.ParamArray.length; i < n; i++)
> 1393:   {
> 1394:           Target = this.ParamArray[i];
> 1395:           if(Target["Name"] == Name)
> 1396:           {
> 1397:                   return Target["Value"];
> 1398:           }
> 1399:   }
> 1400: }
> 1401:
> 1402: function RSSubstituteParams(SQL)
> 1403: {
> 1404:   for(i = 0, n = this.ParamArray.length; i < n; i++)
> 1405:   {
> 1406:           var Param = this.ParamArray[i];
> 1407:           var ParamName = Param["Name"];
> 1408:           var nIndex = -1;
> 1409:           do
> 1410:           {
> 1411:                   nIndex = SQL.indexOf(ParamName, nIndex + 1);
> 1412:                   if(nIndex > 0)
> 1413:                   {
> 1414:                           // found an occurrance of the param name
>
> 1415:                           // now see whether it is a token or not
> by
> 1416:                           // testing the character before and
> after
> 1417:                           var C1 = SQL.charAt(nIndex - 1);
> 1418:                           var C2 = \'~\';
> 1419:                           if((nIndex + ParamName.length) <
> SQL.length)
> 1420:                           {
> 1421:                                   C2 = SQL.charAt(nIndex +
> ParamName.length);
> 1422:                           }
> 1423:                           if((this.SpecialChars.indexOf(C1) != -1)
> && (this.SpecialChars.indexOf(C2) != -1))
> 1424:                           {
> 1425:                                   var NewSQL = SQL.slice(0,
> nIndex);
> 1426:                                   NewSQL += Param["Value"];
> 1427:                                   NewSQL += SQL.slice(nIndex +
> ParamName.length, SQL.length);
> 1428:                                   SQL = NewSQL;
> 1429:                           }
> 1430:                   }
> 1431:                   nIndex++;
> 1432:           } while(nIndex > 0 && nIndex < SQL.length);
> 1433:   }
> 1434:   return SQL;
> 1435: }
> 1436:
> 1437: function RSFindBinding(ColumnName)
> 1438: {
> 1439:   if(this.BindingsArray != null)
> 1440:   {
> 1441:           for(i = 0, n = this.BindingsArray.length; i < n; i++)
> 1442:           {
> 1443:                   BindingObj = this.BindingsArray[i];
> 1444:                   if(BindingObj["Name"] == ColumnName)
> 1445:                   {
> 1446:                           return BindingObj;
> 1447:                   }
> 1448:           }
> 1449:   }
> 1450:   return null;
> 1451: }
> 1452:
> 1453: function RSAddBinding(ColumnName, BoundValue, BindingType)
> 1454: {
> 1455:   if(this.BindingsArray == null)
> 1456:   {
> 1457:           this.BindingsArray = new Array();
> 1458:   }
> 1459:   BindingObj = this.FindBinding(ColumnName);
> 1460:   if(BindingObj == null)
> 1461:   {
> 1462:           BindingObj = new Object();
> 1463:           BindingObj["Name"] = ColumnName;
> 1464:           this.BindingsArray[this.BindingsArray.length] =
> BindingObj;
> 1465:   }
> 1466:   BindingObj["Type"] = BindingType;
> 1467:   BindingObj["Value"] = BoundValue;
> 1468: }
> 1469:
> 1470: function RSRemoveBinding(ColumnName)
> 1471: {
> 1472:   if(this.BindingsArray != null && this.BindingsArray.length)
> 1473:   {
> 1474:           BindingsArray = new Array();
> 1475:           for(i = 0, n = this.BindingsArray.length; i < n; i++)
> 1476:           {
> 1477:                   BindingObj = this.BindingsArray[i];
> 1478:                   if(BindingObj["Name"] != ColumnName)
> 1479:                   {
> 1480:                           BindingsArray[BindingsArray.length] =
> BindingObj;
> 1481:                   }
> 1482:           }
> 1483:           this.BindingsArray = null;
> 1484:           this.BindingsArray = new Array();
> 1485:           if(BindingsArray.length)
> 1486:           {
> 1487:                   for(i = 0, n = BindingsArray.length; i < n; i++)
>
> 1488:                   {
> 1489:                           this.BindingsArray[i] =
> BindingsArray[i];
> 1490:                   }
> 1491:           }
> 1492:           BindingsArray = null;
> 1493:   }
> 1494: }
> 1495:
> 1496: function RSGetBindingValue(ColumnName)
> 1497: {
> 1498:   BindingObj = this.FindBinding(ColumnName);
> 1499:   if(BindingObj == null)
> 1500:   {
> 1501:           return "";
> 1502:   }
> 1503:   return BindingObj["Value"];
> 1504: }
> 1505:
> 1506: function RSSetBindingValue(ColumnName, BoundValue)
> 1507: {
> 1508:   BindingObj = this.FindBinding(ColumnName);
> 1509:   if(BindingObj != null)
> 1510:   {
> 1511:           BindingObj["Value"] = BoundValue;
> 1512:   }
> 1513: }
> 1514:
> 1515: function RSGetBindingType(ColumnName)
> 1516: {
> 1517:   BindingObj = this.FindBinding(ColumnName);
> 1518:   if(BindingObj == null)
> 1519:   {
> 1520:           return "";
> 1521:   }
> 1522:   return BindingObj["Type"];
> 1523: }
> 1524:
> 1525: function RSSetBindingType(ColumnName, BindingType)
> 1526: {
> 1527:   BindingObj = this.FindBinding(ColumnName);
> 1528:   if(BindingObj != null)
> 1529:   {
> 1530:           BindingObj["Type"] = BindingType;
> 1531:   }
> 1532: }
> 1533:
> 1534: function RSGetBoundColumnName(BoundValue, BindingType)
> 1535: {
> 1536:   if(this.BindingsArray != null && this.BindingsArray.length)
> 1537:   {
> 1538:           for(i = 0, n = this.BindingsArray.length; i < n; i++)
> 1539:           {
> 1540:                   BindingObj = this.BindingsArray[i];
> 1541:                   if(BindingObj["Value"] == BoundValue &&
> BindingObj["Type"] == BindingType)
> 1542:                   {
> 1543:                           return BindingObj["Name"];
> 1544:                   }
> 1545:           }
> 1546:   }
> 1547:   return "";
> 1548: }
> 1549:
> 1550: function RSGetBoundColumnNameByIndex(Index)
> 1551: {
> 1552:   if(this.BindingsArray != null && Index >= 0 && Index <
> this.BindingsArray.length)
> 1553:   {
> 1554:           BindingObj = this.BindingsArray[Index];
> 1555:           return BindingObj["Name"];
> 1556:   }
> 1557:   return "";
> 1558: }
> 1559:
> 1560:
> 1561: function CreateRS(Name, DSN, UID, PWD, SQL, UniqueKeyCols,
> Updateable, CursorType, CursorLocation, LockType, TableNames)
> 1562: {
> 1563:   var Object;
> 1564:   if(CreateRS.arguments.length > CreateRS.length)
> 1565:   {
> 1566:           // variable args
> 1567:           var EvalMe = "Object = new Recordset(Name, DSN, UID,
> PWD, SQL, UniqueKeyCols, Updateable, CursorType, CursorLocation,
> LockType, TableNames";
> 1568:           var nArgs = CreateRS.arguments.length;
> 1569:           var nArg = CreateRS.length;
> 1570:           for(; nArg < nArgs; nArg++)
> 1571:           {
> 1572:                   EvalMe += ", CreateRS.arguments[" + nArg + "]";
> 1573:           }
> 1574:           EvalMe += ");"
> 1575:           eval(EvalMe);
> 1576:   }
> 1577:   else
> 1578:   {
> 1579:           Object = new Recordset(Name, DSN, UID, PWD, SQL,
> UniqueKeyCols, Updateable, CursorType, CursorLocation, LockType,
> TableNames);
> 1580:   }
> 1581:   return Object;
> 1582: }
> 1583:
> 1584: function iif(cond, X, Y)
> 1585: {
> 1586:   if(cond)
> 1587:   {
> 1588:           return X;
> 1589:   }
> 1590:   return Y;
> 1591: }
> 1592:
> 1593: function iifWithHTMLEncode(cond, X, Y)
> 1594: {
> 1595:   if(cond)
> 1596:   {
> 1597:           if(X == null)
> 1598:           {
> 1599:                   X = "";
> 1600:           }
> 1601:           return Server.HTMLEncode(X);
> 1602:   }
> 1603:   return Y;
> 1604: }
> 1605:
> 1606:
> 1607: function RSTrimCRLF(Value)
> 1608: {
> 1609:   TrimValue = "" + Value;
> 1610:   CRLFIndex = TrimValue.length;
> 1611:   CRLFIndex = CRLFIndex -1;
> 1612:   if(CRLFIndex >= 0)
> 1613:   {
> 1614:           for (;;)
> 1615:           {
> 1616:                   if ((TrimValue.charAt(CRLFIndex) != \'\\n\') &&
> (TrimValue.charAt(CRLFIndex) != \'\\r\'))
> 1617:                   {
> 1618:                           break;
> 1619:                   }
> 1620:                   else
> 1621:                   {
> 1622:                           CRLFIndex--;
> 1623:                   }
> 1624:           }
> 1625:
> 1626:           if (CRLFIndex < 0)
> 1627:           {
> 1628:                   CRLFIndex =0;
> 1629:           }
> 1630:
> 1631:           TrimValue = TrimValue.substring(0,CRLFIndex+1);
> 1632:   }
> 1633:
> 1634:   return TrimValue;
> 1635: }
> 1636:
> 1637: function ReplaceSingleQuoteWithTwo(Value)
> 1638: {
> 1639:   var re = /\'/i;
> 1640:   var RValue = String(Value).replace(re, "\'\'");
> 1641:   return RValue;
> 1642: }
> 1643:
> 1644: </SCRIPT>
> 1645:
> 1646: <SCRIPT LANGUAGE=VBScript RUNAT=Server>
> 1647: function RSFormatDateTime(Date, NamedFormat)
> 1648:   if Date then
> 1649:           RSFormatDateTime = FormatDateTime(Date, NamedFormat)
> 1650:   else
> 1651:           RSFormatDateTime = Date
> 1652:   end if
> 1653: end function
> 1654: </SCRIPT>
> 1655:
> 1656: '
> 1657: );
> 1658:
> 1659: ## CODE BEGIN ##
> 1660: /* Connection Pooler */
> 1661: var ConnectionCache = new ConnectionCache()
> 1662: /* server-side recordset */
> 1663: var GuestBookRecordset = new Recordset("GuestBookRecordset", "",
> "", "", "", "", true, 2, 3, 3, "");
> 1664: GuestBookRecordset_BeforeOpen();
> 1665: GuestBookRecordset.Open();
> 1666: GuestBookRecordset.ProcessAction();
> 1667: GuestBookRecordset.SetMessages("","");
> 1668: ## END ##
> 1669:
> 1670: ## CODE BEGIN ##
> 1671: function GuestBookRecordset_BeforeOpen() {
> 1672:
> 1673: }
> 1674: ## END ##
> 1675:
> 1676: $main::Response->Write(
> 1677: '
> 1678: <HTML>
> 1679: <HEAD>
> 1680: <META NAME="GENERATOR" CONTENT="Elemental Software Drumbeat 2000
> 3.04.411">
> 1681: <META HTTP-EQUIV="Content-Type" CONTENT="text/html;
> charset=iso-8859-1">
> 1682:
> 1683: <TITLE>Drumbeat 2000 - Guest Book Starting Point - Entry
> Summaries</TITLE>
> 1684: </HEAD>
> 1685: <BODY TOPMARGIN=0 LEFTMARGIN=0 MARGINWIDTH=0 MARGINHEIGHT=0
> BACKGROUND="media/images/bk_GuestBook.GIF" BGColor="#ffffff"
> LINK="#0000ff" ALink="#00ff00" VLINK="#ff0000">
> 1686:
> 1687: <A NAME="StartOfPage"></A>
> 1688:
> 1689:
> 1690: <FORM  NAME="GuestBookViewSummariesForm" METHOD="Post"
> ACTION="ViewEntrySummaries.asp">
> 1691:
> 1692:   <TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0>
> 1693:     <TR>
> 1694:       <TD WIDTH=10 HEIGHT=90></TD>
> 1695:       <TD WIDTH=16 HEIGHT=90></TD>
> 1696:       <TD WIDTH=2 HEIGHT=90></TD>
> 1697:       <TD WIDTH=104 HEIGHT=90></TD>
> 1698:       <TD WIDTH=4 HEIGHT=90></TD>
> 1699:       <TD WIDTH=90 HEIGHT=90></TD>
> 1700:       <TD WIDTH=15 HEIGHT=90></TD>
> 1701:       <TD WIDTH=300 HEIGHT=90></TD>
> 1702:       <TD WIDTH=60 HEIGHT=90></TD>
> 1703:     </TR>
> 1704:     <TR>
> 1705:       <TD WIDTH=10 HEIGHT=44></TD>
> 1706:       <TD VALIGN=TOP WIDTH=122 COLSPAN=3><A HREF="Index.asp"><IMG
> Name="Image1" SRC="media/images/bt_MainPage.gif" Width="82" Height="11"
> Border="0"></A></TD>
> 1707:       <TD VALIGN=TOP WIDTH=469 COLSPAN=5 ROWSPAN=2></TD>
> 1708:     </TR>
> 1709:     <TR>
> 1710:       <TD WIDTH=10 HEIGHT=16></TD>
> 1711:       <TD COLSPAN=3></TD>
> 1712:     </TR>
> 1713:     <TR>
> 1714:       <TD WIDTH=10 HEIGHT=50></TD>
> 1715:       <TD COLSPAN=3></TD>
> 1716:       <TD VALIGN=TOP WIDTH=469 COLSPAN=5 ROWSPAN=3></TD>
> 1717:     </TR>
> 1718:     <TR>
> 1719:       <TD WIDTH=10 HEIGHT=30></TD>
> 1720:       <TD></TD>
> 1721:       <TD VALIGN=TOP WIDTH=106 COLSPAN=2><INPUT TYPE=Submit
> NAME="FormButton1" value="<- Back" ></TD>
> 1722:     </TR>
> 1723:     <TR>
> 1724:       <TD WIDTH=10 HEIGHT=24></TD>
> 1725:       <TD COLSPAN=2></TD>
> 1726:       <TD VALIGN=TOP WIDTH=104><INPUT TYPE=Submit
> NAME="FormButton2" value="Next ->" ></TD>
> 1727:     </TR>
> 1728:     <TR>
> 1729:       <TD><IMG SRC="media/images/_tx_.gif" Align="left" Width="10"
> Height="1" Border="0" VSpace="0" HSpace="0"></TD>
> 1730:       <TD><IMG SRC="media/images/_tx_.gif" Align="left" Width="16"
> Height="1" Border="0" VSpace="0" HSpace="0"></TD>
> 1731:       <TD><IMG SRC="media/images/_tx_.gif" Align="left" Width="2"
> Height="1" Border="0" VSpace="0" HSpace="0"></TD>
> 1732:       <TD><IMG SRC="media/images/_tx_.gif" Align="left"
> Width="104" Height="1" Border="0" VSpace="0" HSpace="0"></TD>
> 1733:       <TD><IMG SRC="media/images/_tx_.gif" Align="left" Width="4"
> Height="1" Border="0" VSpace="0" HSpace="0"></TD>
> 1734:       <TD><IMG SRC="media/images/_tx_.gif" Align="left" Width="90"
> Height="1" Border="0" VSpace="0" HSpace="0"></TD>
> 1735:       <TD><IMG SRC="media/images/_tx_.gif" Align="left" Width="15"
> Height="1" Border="0" VSpace="0" HSpace="0"></TD>
> 1736:       <TD><IMG SRC="media/images/_tx_.gif" Align="left"
> Width="300" Height="1" Border="0" VSpace="0" HSpace="0"></TD>
> 1737:       <TD><IMG SRC="media/images/_tx_.gif" Align="left" Width="60"
> Height="1" Border="0" VSpace="0" HSpace="0"></TD>
> 1738:     </TR>
> 1739:   </TABLE>
> 1740:   <INPUT TYPE="Hidden" NAME="GuestBookRecordset_Action">
> 1741:   <INPUT TYPE="Hidden" NAME="GuestBookRecordset_Position"
> VALUE="'.((GuestBookRecordset.GetState())).'">
> 1742:   <INPUT TYPE="Hidden" NAME="_Bindings" VALUE="">
> 1743: </FORM>
> 1744:
> 1745: <A NAME="EndOfPage">&nbsp</A>
> 1746: </BODY></HTML>
> 1747:
> 1748: '
> 1749: );
> 1750:
> 1751:
> 1752: #######################################################
> 1753: ## End script insert
> 1754: #######################################################
> 1755:
> 1756:   $main::Response->End();
> 1757: }
> 1758: 1;
>
>
>
> If you can't help yourself, please send mail to [EMAIL PROTECTED] or
> [EMAIL PROTECTED] about your problem, including this output.
>

Reply via email to