如何使用Javascript迭代DAO字段集合

如何使用Javascript迭代DAO字段集合,javascript,dao,hta,Javascript,Dao,Hta,我写了一个HTML应用程序,效果很好。这些文件以.hta结尾,仅使用internet explorer打开。在这个应用程序中,我使用了一个属性名作为数据库键值的对象。由于这是windows和Microsoft,我决定转换为DAO。多年来,我用DAO做了很多工作,但总是用VB、VBA或.net语法,而不是Javascript 使用Javascript时,如果我将记录集中的字段命名为记录集对象的属性,即使用句点,则这些字段是可访问的,但是我必须以这种方式硬编码,并且它不是动态的。我要做的是迭代记录集

我写了一个HTML应用程序,效果很好。这些文件以.hta结尾,仅使用internet explorer打开。在这个应用程序中,我使用了一个属性名作为数据库键值的对象。由于这是windows和Microsoft,我决定转换为DAO。多年来,我用DAO做了很多工作,但总是用VB、VBA或.net语法,而不是Javascript

使用Javascript时,如果我将记录集中的字段命名为记录集对象的属性,即使用句点,则这些字段是可访问的,但是我必须以这种方式硬编码,并且它不是动态的。我要做的是迭代记录集对象的Fields集合并获取字段名。我无法让它工作。它一直在说“无法从对象的空实例获取名称”

在下面的db_update函数中,我传递了一个对象,该对象的属性名与记录集中的字段名匹配。该例程非常灵活,允许我避免硬编码字段名。我是这么做的,但我想换成这种格式,它不会工作。我在任何地方都找不到使用带有Javascript的DAO的任何信息。例行程序中有一条注释说“这一行失败”。Count属性在Fields集合中具有正确的值,因此存在Fields集合

函数设置(){
db_engine=newActiveXObject(“DAO.DBEngine.36”);
fso=新的ActiveXObject(“Scripting.FileSystemObject”);
.....
如果(fso.FileExists(mdb))fso.DeleteFile(mdb);
db_db=db_engine.CreateDatabase(mdb,“LANGID=0x0409;CP=1252;COUNTRY=0”);
var table=db_db.CreateTableDef(“文件”),ord=1;
db_创建_字段(表“id”,4,4,ord,false,false);
ord++;
db_创建_字段(表,“路径”,10255,ord,false,false);
ord++;
db_创建_字段(表,“本地”,3,2,ord,false,false);
ord++;
.....
}
函数db_create_字段(表、名称、类型、长度、序号、必填项、允许_zl){
var fld=table.CreateField(名称、类型、长度);
fld.Attributes=1;
fld.OrdinalPosition=序号;
fld.ValidationRule=“”;
fld.ValidationText=“”;
fld.Required=Required?-1:0;
试一试{
fld.AllowZeroLength=allow_zl?-1:0;
}
捕获(e){
}
表.字段.追加(fld);
}
功能数据库更新(wad){
var rst=db_db.OpenRecordset(“从文件中选择*,其中路径=”+wad.path+”,2);
if(rst.EOF){
rst.AddNew();
rst.id=文件_id++;
rst.path=wad.path;
}
否则{
rst.edit();
}
变量计数=rst.Fields.count,名称;
对于(var j=0;j新溶液

这是我的最终解决方案,它运行得更快。搜索字段位于wad之外,因此不需要进行不必要的更新,也不需要枚举。如果wad中的属性不在记录集字段列表中,则当然会生成错误

函数数据库更新(路径,wad){
var rst=db_db.OpenRecordset(“从文件中选择*,其中路径='”+path+”,2);
if(rst.EOF){
rst.AddNew();
rst.id=文件_id++;
rst.path=路径;
}
否则{
rst.edit();
}
变量键=对象键(wad);

对于(var j=0;jMaybe),我必须实例化一个枚举器对象。这是迭代文件系统对象的文件和文件夹集合所需的。这里可能也同样适用。我将尝试一下。