Access 开发日记

1.Access 中 True 和 False 只是 2 个关键字。True 的值等于 -1,False 的值等于 0.

用于判断条件时的写法
数据库类型 值为真时的写法 值为假时的写法
Access

写法1:Where 字段A=True

写法2:Where 字段A=-1

写法1:Where 字段A=False

写法2:Where 字段A=0

 

2.语法错误,操作符丢失

原因一:使用 inner join连接两个以上的表时,如果按照常规SQL写法会报错:语法错误,操作符丢失等问题。
解决:加括号。Access有多个Inner Join时,要用括号括起来,以下4张表连接

SELECT t1.*, t2.*, c1.ClientName AS 单位, p1.ProjectName AS 工程, p1.ProjectAddr AS 施工地址
FROM (TblProjectInfo AS p1 INNER JOIN (TblTaskInfo AS t3 INNER JOIN (TblProduceSet AS t1 INNER JOIN TblProduceStartInfo AS t2 ON t1.ID = t2.SetID) ON t3.ID = t1.TaskID) ON p1.ID = t3.ProjectID)
INNER JOIN TblClientInfo AS c1 ON t3.ClientID = c1.ID

SELECT p.Serial,d.* FROM ((Dosage AS d
inner join piece AS p on d.piece=p.ID )
inner join Product AS pt on p.Product=pt.ID )
where format(pt.[DatTim],'yyyy-MM-dd HH:mm:ss')>=format('2022-04-12 05:00:00','yyyy-MM-dd HH:mm:ss') 

原因二:设置别名没有使用 AS , 会报错:操作符丢失

select * from Produce AS pt 

 

3.时间的转换:

select format('2017-10-01 13:00:00','yyyy-MM-dd hh:mm:ss')

select cdate('2017-10-01 00:00:00')

时间的对比:使用 # 号包起来

select * from  生产记录 WHERE format('{0}','yyyy-MM-dd HH:mm:ss')<format(时间,'yyyy-MM-dd HH:mm:ss') and format(时间,'yyyy-MM-dd HH:mm:ss')<=format('{1}','yyyy-MM-dd HH:mm:ss') 

 

4.类型转换函数

官方API:Access 类型转换

 

5. ( 五位)数字格式 的 时间类型

 

 

常规时间戳 一般都是十位的或者十三位的,这个五位数并不是时间戳,但也是时间的一种表现形式,Excel中常用。

这个值是代表的天数也就是days,这种表示方式会存在一个基点时间,其他的时间就是在这个时间基点上加上相对应的天数就可以了。这个时间节点就是1899-12-31。

知道这个以后我们就知道该怎么去转换相应的时间了,下面举例(SQL)说明:

 

 

6.System.data.oledb.oledbexceptionoledb 超出系统资源.

var ipcXiaohao = new IpcInteractWCFWrapper(setting.DBconnectiong, "XiaoHao");
try
{
    var TJlbList = new List<DownloadMaterial>();

    var maxTime = DateTime.Now.AddMinutes(minTime).ToString("yyyy-MM-dd HH:mm:ss");
    string sql_TJlb = string.Format(@"SELECT * FROM Produce WHERE Clng(Produce.Mark)>{1}
        and format(Produce.[ProdTimE],'yyyy-MM-dd HH:mm:ss')<format('{2}','yyyy-MM-dd HH:mm:ss')  
        and Produce.[ProdTimE] is not null and Produce.[ProdTimE]<>Produce.[ProdTimB] and format(Produce.[ProdTimE],'HH:mm:ss')<>'00:00:00' 
        order by Clng(Produce.Mark) Asc ", groupDataSize, materialSetting.LastGotNo, maxTime);
    var dt_TJlb = ipcXiaohao.ExecuteDataTable(new StringBuilder(sql_TJlb));
    if (dt_TJlb == null)
    {
        ipcXiaohao.Dispose();
        MyLog4NetInfo.Error(MethodBase.GetCurrentMethod().DeclaringType, new Exception("采集记录1-异常错误:sql=" + sql_TJlb));
        return TJlbList;
    }

    ipcXiaohao.Dispose();
    return TJlbList;
}
catch (Exception ex)
{
    MyLog4NetInfo.Error(MethodBase.GetCurrentMethod().DeclaringType, ex);
    ipcXiaohao.Dispose();
    return new List<DownloadMaterial>();
}

项目 使用的 Wcf 进行Access数据 Select 查询的时候,报错。wcf 所在电脑是xp系统,3G内存,硬件较低

解决:使用wcf对象后,需要释放资源,ipcXiaohao.Dispose();

 

7.在文本型字段中,找出最大的数字

var maxId = "";
string sqlTaskID = "SELECT MAX(Clng(Task.ID)) AS MaxID FROM (select * from Task where IsNumeric(Task.ID))";
var _twcfRlt = wrapper.ExecuteScalar(new StringBuilder(sqlTaskID));
if (_twcfRlt.isSuccess)
{
  maxId = _twcfRlt.model.ToString();
}
taskId = string.IsNullOrEmpty(maxId) ? 1 : Convert.ToInt32(maxId) + 1;

 

posted @ 2017-10-27 16:42  竹殇  阅读(618)  评论(0编辑  收藏  举报