CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  其他数据库开发 >  Access

求助:Access使用SQL创建设计表的布尔型变量格式

楼主raulvim()2006-11-21 18:56:48 在 其他数据库开发 / Access 提问

我用SQL在VB   程序中建   设计表。其中有一布尔型变量,其默认格式为1为true,0为False。我想在SQL语句中使它的格式为Yes/No,请问我该怎么写SQL语句?  
            如例:  
              dim   strSQL   as   string  
          strSQl="Create   table   AA(   ID   AUTOINCREMENT,Name   Varchar(12),"&   _    
          "Exist   [red]yesno[/red],Premary   Key(ID))"  
  问题点数:80、回复次数:61Top

1 楼raulvim()回复于 2006-11-21 19:13:05 得分 0

我用SQL在VB     程序中建     设计表。其中有一布尔型变量,其默认格式为1为true,0为False。我想在SQL语句中使它的格式为Yes/No,请问我该怎么写SQL语句?      
                    如例:      
                        dim     strSQL     as     string      
                strSQl="Create     table     AA(     ID     AUTOINCREMENT,Name     Varchar(12),"&     _          
                "Exist     yesno,Premary     Key(ID))"      
   
  Top

2 楼raulvim()回复于 2006-11-21 23:58:49 得分 0

楼上的,干吗卖广告卖到我这里啊???????????????????    
    我用SQL在VB         程序中建         设计表。其中有一布尔型变量,其默认格式为1为true,0为False。我想在SQL语句中使它的格式为Yes/No,请问我该怎么写SQL语句?              
                                    如例:              
                                            dim         strSQL         as         string              
                            strSQl=     "Create         table         AA(         ID         AUTOINCREMENT,Name         Varchar(12),     "&         _                      
                                "Exist         yesno,Premary         Key(ID))Top

3 楼wwwwb()回复于 2006-11-22 07:29:03 得分 10

不能做到,   用DAO,FOX   EXAMPLE  
  For   Each   ffg   In   RR1.TableDefs("rrrr").Fields  
  If   ffg.Name   =   "b1"   Then  
  For   Each   qwe   In   ffg.Properties  
  MsgBox   qwe.Name  
  If   qwe.Name   =   "format"   Then  
  MsgBox   "123"  
  ffg.Properties.Delete   "format"  
  End   If  
  Next  
  Set   cp   =   ffg.CreateProperty("format",   10,   "true/false")  
  ffg.Properties.Append   cp  
  End   If  
  NextTop

4 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-11-22 07:51:00 得分 10

用SQL语句创建表时不能指定这个格式,必须通过VBA代码实现。  
   
  可以在查询时变通处理,如下:  
   
  SELECT   format([字段名],'on/off'),format([字段名],'yes/no'),format([字段名],'true/false')   ,*  
  FROM   表名  
  Top

5 楼wwwwb()回复于 2006-11-22 07:54:50 得分 0

简单一点,用FORMAT  
  SELECT   format(F1,'yes/no'),*   FROM   TT  
  Top

6 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-11-22 07:58:21 得分 0

在需要显示指定格式的窗体或查询、报表中,用SQL指定格式即可。Top

7 楼raulvim()回复于 2006-11-22 09:41:51 得分 0

SELECT   format([字段名],'on/off'),format([字段名],'yes/no'),format([字段名],'true/false')   ,*  
  FROM   表名  
        在SQL创建表的过程中不能实现设置表中布尔型变量的格式吗?在需要显示指定格式的窗体或查询、报表中,用SQL指定格式即可?是插入代码到查询或者报表中吗?  
  就我那例子来说,如果格式为Yes/No的话,打开表是看到一个勾选框的,默认为未选,即No.怎样通过代码在程序中实现阿  
  Top

8 楼wwwwb()回复于 2006-11-22 09:47:45 得分 0

SELECT   format([字段名],'on/off'),format([字段名],'yes/no'),format([字段名],'true/false')   ,*  
  FROM   表名  
        在SQL创建表的过程中不能实现设置表中布尔型变量的格式吗?  
  不能  
   
  在需要显示指定格式的窗体或查询、报表中,用SQL指定格式即可?  
  是插入代码到查询或者报表中吗?  
  查询  
   
  就我那例子来说,如果格式为Yes/No的话,打开表是看到一个勾选框的,默认为未选,即No.怎样通过代码在程序中实现阿  
  用DAO实现  
  for   example  
  Set   df   =   CurrentDb  
  For   Each   affg   In   df.TableDefs("tblNewOrder2").Fields  
  If   affg.Name   =   "rr"   Then  
  For   Each   qwe   In   affg.Properties  
  If   qwe.Name   =   "format"   Or   LCase(qwe.Name)   =   "displaycontrol"   Then  
  qw   =   qwe.Name  
  affg.Properties.Delete   qw  
  End   If  
  Next  
  Set   cp   =   affg.CreateProperty("format",   10,   "true/false")  
  affg.Properties.Append   cp  
  Set   cp   =   affg.CreateProperty("displaycontrol",   3,   acCheckBox)  
  affg.Properties.Append   cp  
  End   IfTop

9 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-11-22 09:50:02 得分 0

如果要修改表中字段的格式,用楼上提供的代码实现即可。  
  Top

10 楼raulvim()回复于 2006-11-22 11:36:20 得分 0

[/color=blue]我不懂我再问[/color],我用的是ADO连接数据库的,再加DAO不会有冲突吧?  
          [/color=red]df.TableDefs("tblNewOrder2").Fields[/color]是什么意思啊,主要是里面的参数不太明白,因为我DAO用的少。  
        Set   [/color=red]cp[/color]   =   affg.[color=red]CreateProperty[/color]("format",   10,   "true/false")  
          cp是什么类型啊,没有定义阿,还有qw,affg.name。还有CreateProperty对象的属性?tblNewOrder2是表名吧。  
      我在表建成之后的下一步马上修改变量类型对吧?  
      谢谢你们的指点。  
           
  Top

11 楼wwwwb()回复于 2006-11-22 11:42:53 得分 0

1、自己看看DAO的帮助;  
  2、FOR   EXAMPLE:  
  VCATALOG   =   CREATEOBJECT('DAO.DBEngine.36')  
  fg1=VCATALOG.opendatabase("d:\zz\db2.mdb")  
  For   Each   affg   In   fg1.TableDefs("tblNewOrder2").Fields  
  If   affg.Name   =   "rr"   Then  
  For   Each   qwe   In   affg.Properties  
  If   qwe.Name   =   "format"   Or   Lower(qwe.Name)   =   "displaycontrol"   Then  
  qw   =   qwe.Name  
  affg.Properties.Delete(qw)  
  EndIf  
  Next  
  cp   =   affg.CreateProperty("format",   10,   "true/false")  
  affg.Properties.Append(cp)  
  cp   =   affg.CreateProperty("displaycontrol",   3,   106)  
  affg.Properties.Append(cp)  
  EndIf  
  Next  
  3、ADO建表,有一定时间的延时,自己用SLEEP延时。Top

12 楼wwwwb()回复于 2006-11-22 12:50:06 得分 0

运行环境?Top

13 楼raulvim()回复于 2006-11-22 14:10:08 得分 0

运行环境就是Access2003,通过ADO连接数据库。ACCESS2003本身合成了ACCESS和VB的环境。楼上的还有什么要补充的吗?  
      我看cp是你自己定义的变量吧,什么类型阿?还有qw。tblNewOrder2是表名吧。  
  Top

14 楼wwwwb()回复于 2006-11-22 14:16:20 得分 0

在ACCESS中运行,我的代码即可,  
  qw。tblNewOrder2是表名吧。  
  NO,QW是变量,tblNewOrder2是表名  
  cp是:  
  Dim   cp   As   DAO.PropertyTop

15 楼raulvim()回复于 2006-11-22 14:29:48 得分 0

非常感谢楼上及时的回复,好人一生平安。  
              qw是什么类型变量阿,能否提供详细一点的代码。谢谢Top

16 楼wwwwb()回复于 2006-11-22 14:32:36 得分 0

qw是什么类型变量阿:stringTop

17 楼raulvim()回复于 2006-11-22 14:34:49 得分 0

...        
  dim   strSQL   as   string  
          strSQl="Create   table   AA(   ID   AUTOINCREMENT,Name   Varchar(12),"&   _    
          "Exist   [red]yesno[/red],Premary   Key(ID))"  
          GenerateTable   rsRecords,   strSQl  
        ....  
  Public   Function   GenerateTable(rsRecords   As   ADODB.Recordset,   strSQl   As   String)   As   Boolean  
    On   Error   GoTo   handleerror  
      Set   cnConn   =   New   ADODB.Connection  
      cnConn.Open   strConnection  
      rsRecords.Open   strSQl,   cnConn,   adOpenStatic,   adLockOptimistic  
      GenerateTable   =   True  
      Set   cnConn   =   Nothing  
    Exit   Function  
  handleerror:  
            GeneralErrorHandler   Err.Number,   Err.Description,   DB_LOGIC,   "GenerateTable"  
          Exit   Function  
   
  End   Function  
  Top

18 楼raulvim()回复于 2006-11-22 14:38:05 得分 0

qwe呢?affg是string吧,用来表示什么的Top

19 楼raulvim()回复于 2006-11-22 14:43:15 得分 0

引用项目   Microsoft   DAO   3.6Object   Library可以了吧。上面是我的建表程序Top

20 楼wwwwb()回复于 2006-11-22 14:43:54 得分 0

affg是string吧  
  no,Dim   affg   As   DAO.Field  
  qwe:  
  Dim   qwe   As   DAO.PropertyTop

21 楼wwwwb()回复于 2006-11-22 14:44:55 得分 0

1、自己多试试;  
  2、看看ACCESS的帮助。Top

22 楼raulvim()回复于 2006-11-22 14:46:46 得分 0

谢谢你。我先试试吧。搞不懂再向你请教。Top

23 楼raulvim()回复于 2006-11-22 15:22:31 得分 0

请教wwwwb(),DAO不怎么熟悉阿。  
          VCATALOG   是   Workspace   吧  
          我dim   fg1   as   Database  
          但是fg1=VCATALOG.opendatabase("d:\zz\db2.mdb")就错误了,说fg1为不正确的属性,请指教  
  Top

24 楼raulvim()回复于 2006-11-22 15:24:59 得分 0

是要指定fg1为ACCESS数据库吗?怎么赋值?Top

25 楼wwwwb()回复于 2006-11-22 15:29:02 得分 20

1、看看ACCESS的帮助;  
  2、你在ACCESS中,用  
  Set   df   =   CurrentDb  
  For   Each   affg   In   df.TableDefs("tblNewOrder2").Fields  
  If   affg.Name   =   "rr"   Then  
  For   Each   qwe   In   affg.Properties  
  If   qwe.Name   =   "format"   Or   LCase(qwe.Name)   =   "displaycontrol"   Then  
  qw   =   qwe.Name  
  affg.Properties.Delete   qw  
  End   If  
  Next  
  Set   cp   =   affg.CreateProperty("format",   10,   "true/false")  
  affg.Properties.Append   cp  
  Set   cp   =   affg.CreateProperty("displaycontrol",   3,   acCheckBox)  
  affg.Properties.Append   cp  
  End   If  
  即可,第二段代码,是在其它语言的代码,你的运行环境?Top

26 楼raulvim()回复于 2006-11-22 15:49:16 得分 0

这个Workspace应该是这样吧  
      Dim   VCATALOG   As   DAO.Workspace  
      Set   VCATALOG   =   CreateObject("DAO.DBEngine.36")  
  Top

27 楼wwwwb()回复于 2006-11-22 15:57:14 得分 0

这个Workspace应该是这样吧  
      Dim   VCATALOG   As   DAO.Workspace  
      no,   Dim   dbe   As   Object  
  在ACCESS中不需要这样。Top

28 楼raulvim()回复于 2006-11-22 16:08:17 得分 0

再问,是否还要写TableDefX方法的程序Top

29 楼raulvim()回复于 2006-11-22 16:14:42 得分 0

运行环境是ACCESS集成的ACCESS+VB,ADO连接数据库,即  
  Sub   OpenDbConnection()  
   
          On   Error   GoTo   handleerror  
           
          strConnection   =   "Provider=Microsoft.Jet.OLEDB.4.0;"   &   _  
                                          "Data   Source="   &   CurrentProject.Path   &   "\DataBase\"   &   DB   &   ".mdb;"  
           
                  'create   a   new   connection   instance   and   open   it   using   the   connection   string  
                  Set   cnConn   =   New   ADODB.Connection  
                  cnConn.Open   strConnection  
           
          Exit   Sub  
   
  handleerror:  
          GeneralErrorHandler   Err.Number,   Err.Description,   DB_LOGIC,   "OpenDbConnection"  
          Exit   Sub  
   
  End   Sub  
   
  即可,第二段代码,是在其它语言的代码,你的运行环境?  
   
  第二段代码是指下面的吗?  
  1、自己看看DAO的帮助;  
  2、FOR   EXAMPLE:  
  VCATALOG   =   CREATEOBJECT('DAO.DBEngine.36')  
  fg1=VCATALOG.opendatabase("d:\zz\db2.mdb")  
  For   Each   affg   In   fg1.TableDefs("tblNewOrder2").Fields  
  If   affg.Name   =   "rr"   Then  
  For   Each   qwe   In   affg.Properties  
  If   qwe.Name   =   "format"   Or   Lower(qwe.Name)   =   "displaycontrol"   Then  
  qw   =   qwe.Name  
  affg.Properties.Delete(qw)  
  EndIf  
  Next  
  cp   =   affg.CreateProperty("format",   10,   "true/false")  
  affg.Properties.Append(cp)  
  cp   =   affg.CreateProperty("displaycontrol",   3,   106)  
  affg.Properties.Append(cp)  
  EndIf  
  Next  
  3、ADO建表,有一定时间的延时,自己用SLEEP延时。  
   
  Top

30 楼wwwwb()回复于 2006-11-22 16:15:16 得分 0

再问,是否还要写TableDefX方法的程序  
  什么意思Top

31 楼wwwwb()回复于 2006-11-22 16:18:56 得分 0

我一在问你的运行环境,我的代码是VBA的,即在ACCESS中,VB的问题  
  请到VB版块去问吧,估计差别不是很大。Top

32 楼raulvim()回复于 2006-11-22 16:26:50 得分 0

不好意思。我的代码就是VBA啊。Visual   Basic   for   Applications.请指教啊。遇到你真是太好了。我用的指导书是ACCESS2003   VBATop

33 楼raulvim()回复于 2006-11-22 16:29:15 得分 0

我这样做程序  
      Public   Function   Formula()   As   Boolean  
  On   Error   GoTo   handleerror  
  Dim   qwe   As   DAO.Property  
  Dim   cp   As   DAO.Property  
  Dim   qw   As   String  
  Dim   fg1   As   DAO.Field  
  Set   fg1   =   CurrentDb  
  Dim   affg   As   DAO.Field  
  Dim   VCATALOG   As   DAO.Workspace  
  Set   VCATALOG   =   CreateObject("DAO.DBEngine.36")  
  fg1   =   VCATALOG.OpenDatabase(""   &   CurrentProject.Path   &   "\DataBase\"   &   DB   &   ".mdb")  
  For   Each   affg   In   fg1.TableDefs(""   &   tblLC   &   "   ").Fields  
  If   affg.Name   =   "Shiped"   Then  
  For   Each   qwe   In   affg.Properties  
  If   qwe.Name   =   "yes/no"   Or   LCase(qwe.Name)   =   "displaycontrol"   Then  
  qw   =   qwe.Name  
  affg.Properties.Delete   (qw)  
  End   If  
  Next  
  cp   =   affg.CreateProperty("yes/no",   10,   "true/false")  
  affg.Properties.Append   (cp)  
  cp   =   affg.CreateProperty("displaycontrol",   3,   106)  
  affg.Properties.Append   (cp)  
  End   If  
  Next  
  Formula   =   True  
    Exit   Function  
  handleerror:  
            GeneralErrorHandler   Err.Number,   Err.Description,   DB_LOGIC,   "Formula"  
          Exit   Function  
   
   
  End   Function  
  Top

34 楼raulvim()回复于 2006-11-22 16:30:26 得分 0

其中Shiped   为字段名,类型为yesno(布尔)Top

35 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-11-22 20:06:45 得分 20

使用如下代码试一下:  
   
   
   
  '功能:设置表中Boolean型变量的格式  
  '引用:DAO  
  Sub   FnSetFieldFormat()  
   
          Dim   db   As   Database  
          Set   db   =   DBEngine(0).OpenDatabase("D:\Test.Mdb")  
   
          Dim   cp1   As   DAO.Property                                   '属性变量1  
          Dim   cp2   As   DAO.Property                                   '属性变量2  
          Dim   strPropertyName   As   String                       '属性名称  
          Dim   fld   As   DAO.Field                                         '字段变量  
           
          For   Each   fld   In   db.TableDefs("表名").Fields  
                  If   fld.name   =   "是否记账"   Then  
                          For   Each   cp1   In   fld.Properties  
                           
                                  If   cp1.name   =   "format"   Or   LCase(cp1.name)   =   "displaycontrol"   Then  
                                          strPropertyName   =   cp1.name  
                                          fld.Properties.Delete   cp1.name  
                                           
                                          If   strPropertyName   =   "format"   Then  
                                                  Set   cp2   =   fld.CreateProperty("format",   10,   "true/false")       'on/off   或   yes/no   或   true/false  
                                                  fld.Properties.Append   cp2  
                                          End   If  
                                          If   strPropertyName   =   "displaycontrol"   Then  
                                                  Set   cp2   =   fld.CreateProperty("displaycontrol",   3,   106)  
                                                  fld.Properties.Append   cp2  
                                          End   If  
                                  End   If  
                          Next  
                  End   If  
          Next  
           
          MsgBox   "ok"  
           
  End   SubTop

36 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-11-22 20:08:01 得分 0

 
  '在模块中创建如下代码:  
  '功能:设置表中Boolean型变量的格式  
  '引用:DAO  
  Sub   FnSetFieldFormat()  
   
          Dim   db   As   Database  
          Set   db   =   DBEngine(0).OpenDatabase("D:\Test.Mdb")  
   
          Dim   cp1   As   DAO.Property                                   '属性变量1  
          Dim   cp2   As   DAO.Property                                   '属性变量2  
          Dim   strPropertyName   As   String                       '属性名称  
          Dim   fld   As   DAO.Field                                         '字段变量  
           
          For   Each   fld   In   db.TableDefs("表名").Fields  
                  If   fld.name   =   "是否记账"   Then  
                          For   Each   cp1   In   fld.Properties  
                           
                                  If   cp1.name   =   "format"   Or   LCase(cp1.name)   =   "displaycontrol"   Then  
                                          strPropertyName   =   cp1.name  
                                          fld.Properties.Delete   cp1.name  
                                           
                                          If   strPropertyName   =   "format"   Then  
                                                  'on/off   或   yes/no   或   true/false  
                                                  Set   cp2   =   fld.CreateProperty("format",   10,   "true/false")  
                                                  fld.Properties.Append   cp2  
                                          End   If  
                                          If   strPropertyName   =   "displaycontrol"   Then  
                                                  Set   cp2   =   fld.CreateProperty("displaycontrol",   3,   106)  
                                                  fld.Properties.Append   cp2  
                                          End   If  
                                  End   If  
                          Next  
                  End   If  
          Next  
           
          MsgBox   "ok"  
           
  End   Sub  
  Top

37 楼raulvim()回复于 2006-11-22 21:11:51 得分 0

谢谢。我马上看看。Top

38 楼raulvim()回复于 2006-11-22 21:53:39 得分 0

程序可以运行。不过有几点我不明白。   If   cp1.name   =   "format"   Or   LCase(cp1.name)   =   "displaycontrol"   Then  
                                          strPropertyName   =   cp1.name  
                                          fld.Properties.Delete   cp1.name  
                                           
                                          If   strPropertyName   =   "format"   Then  
                                                  'on/off   或   yes/no   或   true/false  
                                                  Set   cp2   =   fld.CreateProperty("format",   10,   "true/false")  
                                                  fld.Properties.Append   cp2  
                                          End   If  
                                          If   strPropertyName   =   "displaycontrol"   Then  
                                                  Set   cp2   =   fld.CreateProperty("displaycontrol",   3,   106)  
                                                  fld.Properties.Append   cp2  
                                          End   If  
                                  End   If  
                    首先它是先找数据库,然后找表,再找比较每一个字段跟自己要改变格式的字段。找到字段之后再找字段的各个属性对吧。找到了就修改。  
                    其中的Format是指类型yesno,还是指布尔格式为yes/no,或者True/False."displaycontrol"是指什么啊。Top

39 楼raulvim()回复于 2006-11-23 00:01:07 得分 0

楼上的兄弟,我试过你的方法,可以运行,但是运行之后没有变化,因为找不到cp1.name   =   "format"   Or   LCase(cp1.name)   =   "displaycontrol",所以里面的都执行不了.试个简单的程序吧.我先窗体frmTest,有两个按钮一个是创建表Test的按钮,名称为"CmdCreate",标题为"Create"  
  另外一个为改变布尔型(是/否)格式的按钮,名称为"CmdChange",标题为"ChangeFormat".  
  代码如下   :  
  Option   Compare   Database  
  Const   DB_LOGIC   =   "frmTest"  
   
  Private   Sub   CmdChange_Click()  
    Call   FnSetFieldFormat  
   
  End   Sub  
   
  Private   Sub   CmdCreate_Click()  
  Dim   rsRecords   As   New   ADODB.Recordset,   strSQl   As   String  
  strSQl   =   "create   table   Test(ID   AUTOINCREMENT,Jizhang   yesno,Primary   Key(Id))"  
  GenerateTable   rsRecords,   strSQl  
   
  End   Sub  
   
  Private   Sub   Form_Load()  
  End   Sub  
   
  Public   Function   GenerateTable(rsRecords   As   ADODB.Recordset,   strSQl   As   String)   As   Boolean  
    On   Error   GoTo   handleerror  
      Dim   cnConn   As   ADODB.Connection  
      Dim   strConnection   As   String  
              strConnection   =   "Provider=Microsoft.Jet.OLEDB.4.0;"   &   _  
                                          "Data   Source=D:\Test.mdb;"  
   
      Set   cnConn   =   New   ADODB.Connection  
      cnConn.Open   strConnection  
      rsRecords.Open   strSQl,   cnConn,   adOpenStatic,   adLockOptimistic  
      GenerateTable   =   True  
    Set   cnConn   =   Nothing  
    Exit   Function  
  handleerror:  
            GeneralErrorHandler   Err.Number,   Err.Description,   DB_LOGIC,   "GenerateTable"  
          Exit   Function  
   
   
   
  End   Function  
  Sub   FnSetFieldFormat()  
  On   Error   GoTo   handleerror  
   
          Dim   db   As   Database  
          Set   db   =   DBEngine(0).OpenDatabase("D:\Test.Mdb")  
   
          Dim   cp1   As   DAO.Property                                   '属性变量1  
          Dim   cp2   As   DAO.Property                                   '属性变量2  
          Dim   strPropertyName   As   String                       '属性名称  
          Dim   fld   As   DAO.Field                                         '字段变量  
           
          For   Each   fld   In   db.TableDefs("Test").Fields  
                  If   fld.Name   =   "Jizhang"   Then  
                          For   Each   cp1   In   fld.Properties  
                           
                                  If   cp1.Name   =   "yesno"   Or   LCase(cp1.Name)   =   "displaycontrol"   Then  
                                          strPropertyName   =   cp1.Name  
                                          fld.Properties.Delete   cp1.Name  
                                           
                                          If   strPropertyName   =   "true/false"   Then  
                                                  'on/off   或   yes/no   或   true/false  
                                                  Set   cp2   =   fld.CreateProperty("true/false",   10,   "yes/no")  
                                                  fld.Properties.Append   cp2  
                                          End   If  
                                          If   strPropertyName   =   "displaycontrol"   Then  
                                                  Set   cp2   =   fld.CreateProperty("displaycontrol",   3,   106)  
                                                  fld.Properties.Append   cp2  
                                          End   If  
                                  End   If  
                          Next  
                  End   If  
          Next  
           
          MsgBox   "ok"  
            Exit   Sub  
  handleerror:  
            GeneralErrorHandler   Err.Number,   Err.Description,   DB_LOGIC,   "FnSetFieldFormat"  
          Exit   Sub  
   
           
  End   Sub  
   
  Public   Sub   GeneralErrorHandler(lngErrNumber   As   Long,   strErrDesc   As   String,   strModuleSource   As   String,   strProcedureSource   As   String)  
   
          On   Error   Resume   Next  
           
          Dim   strMessage   As   String  
           
          'build   the   error   message   string   from   the   parameters   passed   in  
          strMessage   =   "An   error   has   occurred   in   the   application."  
          strMessage   =   strMessage   &   vbCrLf   &   "Error   Number:   "   &   lngErrNumber  
          strMessage   =   strMessage   &   vbCrLf   &   "Error   Description:   "   &   strErrDesc  
          strMessage   =   strMessage   &   vbCrLf   &   "Module   Source:   "   &   strModuleSource  
          strMessage   =   strMessage   &   vbCrLf   &   "Procedure   Source:   "   &   strProcedureSource  
           
          'display   the   message   to   the   user  
          MsgBox   strMessage,   vbCritical  
           
          Exit   Sub  
   
  End   Sub  
  运行没有错误,可以找到字段Jizhang,我追踪cp1.Name的值,循环语句一共出现20个值.1,Value;2,Attributes;3,CollatingOrder;4,Type;5,Name;6,OrdinalPosition;7,Size;8,SourceField;9,SourceTable;10,ValidateOnSet;11,DataUpdatable;12,ForeignName;13,DefaultValue;14,ValidationRule;15,ValidationText;16,Required;17,AllowZeroLength;18,FieldSize;19,OriginalValue;20,Visible   Value.  
  而我在设计表中看到的属性确不是这样的,除了同样有DefaultValue(默认值)之外,况且也没有这么多项啊.请指点迷津啊.Top

40 楼wwwwb()回复于 2006-11-23 07:42:12 得分 0

这是我的源码:  
  Private   Declare   Sub   Sleep   Lib   "kernel32"   (ByVal   dwMilliseconds   As   Long)  
   
  Dim   DD   As   New   ADODB.Connection  
  FF   =   "Provider=Microsoft.Jet.OLEDB.4.0;Data   Source=d:\zz\DB2.MDB"  
  DD.Open   FF  
  'DD.Execute   ("CREATE   TABLE   tblNewOrder2   (rr   text(10)   default   '123')")  
  DD.Execute   ("CREATE   TABLE   tblNewOrder2   (rr   logical)")  
  DD.Close  
  Set   DD   =   Nothing  
  Sleep   (10000)  
  Set   df   =   CurrentDb  
  For   Each   affg   In   df.TableDefs("tblNewOrder2").Fields  
  If   affg.Name   =   "rr"   Then  
  For   Each   qwe   In   affg.Properties  
  If   qwe.Name   =   "format"   Or   LCase(qwe.Name)   =   "displaycontrol"   Then  
  qw   =   qwe.Name  
  affg.Properties.Delete   qw  
  End   If  
  Next  
  Set   cp   =   affg.CreateProperty("format",   10,   "true/false")  
  affg.Properties.Append   cp  
  Set   cp   =   affg.CreateProperty("displaycontrol",   3,   acCheckBox)  
  affg.Properties.Append   cp  
  End   If  
  Next  
  在ACCESS2000下测试通过Top

41 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-11-23 08:07:04 得分 0

 
  '改进一下,原来没有考虑到没有格式  
  '在模块中创建如下代码:  
  '功能:设置表中Boolean型变量的格式  
  '引用:DAO  
  Sub   FnSetFieldFormat()  
   
          Dim   db   As   Database  
          Set   db   =   DBEngine(0).OpenDatabase("D:\Test.Mdb")  
   
          Dim   cp1   As   DAO.Property                                   '属性变量1  
          Dim   cp2   As   DAO.Property                                   '属性变量2  
          Dim   fld   As   DAO.Field                                         '字段变量  
           
          For   Each   fld   In   db.TableDefs("表名").Fields  
                  If   fld.name   =   "是否记账"   Then  
                          For   Each   cp1   In   fld.Properties  
                                  If   cp1.name   =   "format"   Then  
                                          fld.Properties.Delete   cp1.name  
                                  End   If  
                          Next  
                           
                          'on/off   或   yes/no   或   true/false  
                          Set   cp2   =   fld.CreateProperty("format",   10,   "true/false")  
                          fld.Properties.Append   cp2  
                  End   If  
          Next  
           
          MsgBox   "ok"  
           
  End   Sub  
   
  Top

42 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-11-23 08:11:10 得分 0

 
  '改进一下,原来没有考虑到没有格式  
   
  '在模块中创建如下代码:  
  '功能:设置表中Boolean型变量的格式  
  '引用:DAO  
  Sub   FnSetFieldFormat()  
   
          Dim   db   As   Database  
          Set   db   =   DBEngine(0).OpenDatabase("D:\Test.Mdb")  
   
          Dim   cp   As   DAO.Property                                   '属性变量  
          Dim   fld   As   DAO.Field                                       '字段变量  
           
          For   Each   fld   In   db.TableDefs("表名").Fields  
                  If   fld.name   =   "是否记账"   Then  
                          For   Each   cp   In   fld.Properties  
                                  If   cp.name   =   "format"   Then  
                                          fld.Properties.Delete   cp.name  
                                  End   If  
                          Next  
                           
                          'on/off   或   yes/no   或   true/false  
                          Set   cp   =   fld.CreateProperty("format",   10,   "true/false")  
                          fld.Properties.Append   cp  
                  End   If  
          Next  
           
          MsgBox   "ok"  
           
  End   Sub  
   
  Top

43 楼raulvim()回复于 2006-11-23 08:41:20 得分 0

非常感动,这么早就回帖了。表只有一个字段吧,不过你那函数Sleep   Lib   "kernel32"()为什么用到字符串"Kernel32"来命名呢?还有里面的长整型参数是指等待时间吗?  
  Top

44 楼wwwwb()回复于 2006-11-23 08:49:14 得分 0

这是申明API函数SLEEP,用来延时,因为ADO创建表有一定时间的延时。  
  Top

45 楼changechange(http://access911.net 是我的个人网站,欢迎光临)回复于 2006-11-23 11:34:32 得分 0

格式不允许通过   JET   SQL   语句来实现,必须用   DAO   或者   ADOX   来实现  
   
  Top

46 楼raulvim()回复于 2006-11-23 15:49:47 得分 0

wangtiecheng兄弟,你那方法不行啊,昨天晚上那种情况。  
  运行没有错误,可以找到字段Jizhang,我追踪cp1.Name的值,循环语句一共出现20个值.1,Value;2,Attributes;3,CollatingOrder;4,Type;5,Name;6,OrdinalPosition;7,Size;8,SourceField;9,SourceTable;10,ValidateOnSet;11,DataUpdatable;12,ForeignName;13,DefaultValue;14,ValidationRule;15,ValidationText;16,Required;17,AllowZeroLength;18,FieldSize;19,OriginalValue;20,Visible   Value.  
      没有一个与format匹配的.所以总是cp1.name<>"format"。Top

47 楼wwwwb()回复于 2006-11-23 16:02:24 得分 0

上传你的MDB到www.access911.net/csdn  
  Top

48 楼raulvim()回复于 2006-11-23 16:07:07 得分 0

再问wwwwb兄弟,你的代码我不大明白阿。虽然我定义了FF为String,但是运行不了程序阿,到FF   =   "Provider=Microsoft.Jet.OLEDB.4.0;Data   Source=d:\zz\DB2.MDB"就说是不正确的外部程序了。我也不知道是不是你还加了其他定义或者控件工程什么的。你能把完整点的.mdb文件发到我邮箱吗,谢谢了!raulvim@126.comTop

49 楼wwwwb()回复于 2006-11-23 16:10:52 得分 0

再问wwwwb兄弟,你的代码我不大明白阿。虽然我定义了FF为String,但是运行不了程序阿,到FF   =   "Provider=Microsoft.Jet.OLEDB.4.0;Data   Source=d:\zz\DB2.MDB"就说是不正确的外部程序了。我也不知道是不是你还加了其他定义或者控件工程什么的。你能把完整点的.mdb文件发到我邮箱吗,谢谢了!raulvim@126.com  
  1、d:\zz\DB2.MDB:你的路径,如D:\TEMP\123.MDB  
  2、引用ADO,不过,已经自动引用ADO,手工引用DAO3.6。Top

50 楼wwwwb()回复于 2006-11-23 16:11:14 得分 0

上传你的MDB到www.access911.net/csdnTop

51 楼raulvim()回复于 2006-11-23 16:17:00 得分 0

已经上传了,地址为  
  http://access911.net/csdn/FileDescription.asp?mdb=2006-11-23&id=129  
  再次多谢wwwwb兄弟的帮忙  
  Top

52 楼raulvim()回复于 2006-11-23 16:21:46 得分 0

我已经引用了Microsoft   DAO   3.6Library了。Top

53 楼wwwwb()回复于 2006-11-23 16:23:24 得分 10

已经上传,窗体1,自己将路径修改一下即可,在ACCESS下测试通过。  
  Top

54 楼raulvim()回复于 2006-11-23 16:30:58 得分 0

非常感谢。我下载了。不过公司的是繁体版所以出现乱码。我修改一下或者回去宿舍再看。Top

55 楼raulvim()回复于 2006-11-23 18:47:06 得分 0

后来重新来过就可以运行,但是运行之后我去设计表看到什么都没有变化啊,我要到是格式为Yes/No,显示控件为文本框,但是这个目的根本就没有达到啊.好像这个格式设置过一次程序就不能再运行了,因为追加不了已经存在的属性.Top

56 楼raulvim()回复于 2006-11-24 08:10:07 得分 0

昨天错误出现在  
        Set   df   =   CurrentDb  
  For   Each   affg   In   df.TableDefs("tblNewOrder2").Fields  
  是因为Set   df   =   CurrentDb指的是当前的mdb,所以程序和表在一个文件内才对。后来可以运行但是运行后格式并没有变化,这个才是令人烦恼的阿。我是想把格式改为Yes/No,显示控件为复选框,达不到目的阿Top

57 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-11-24 12:38:04 得分 0

贴出代码。Top

58 楼raulvim()回复于 2006-11-24 13:25:46 得分 0

问题上午已经解决,谢谢支持!Top

59 楼raulvim()回复于 2006-11-24 14:43:32 得分 0

问题结束。请结贴。Top

60 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-11-24 14:46:54 得分 0

自己揭帖,别人不能帮你结贴。  
   
  右上角“管理”。Top

61 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-11-24 15:14:23 得分 10

-->管理  
  -->输入密码,逐个给分  
  -->给分按钮Top

相关问题

关键词

得分解答快速导航

  • 帖主:raulvim
  • wwwwb
  • wangtiecheng
  • wwwwb
  • wangtiecheng
  • wwwwb
  • wangtiecheng

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo