VC往access数据库插入记录问题

时间:2021-04-16 21:43:42
我对表设置了3个主键。。。只是为了通过测试的一种写法。
我跟踪了执行,在点击按钮执行插入最后一条记录时程序捕获到一个异常,然后AfxMessageBox(e.Description());
可是我打开数据库查看整个表,所有记录都在啊!调试了半天也没什么头绪,上来问问大家。
谢谢各位了


try
{
szSQL.Format("insert into midi values('%s','%s','%s','%s','%s')",
midi_time,midi_channel,midi_no,midi_vel,m_filename);
}

这是插入的sql语句.

16 个解决方案

#1


莫沉莫沉。。。

#2


看看异常报的什么信息?

#3


            szSQL.Format("insert into  'midi ' values('%s','%s','%s','%s','%s')",
                midi_time,midi_channel,midi_no,midi_vel,m_filename);

#4


引用 3 楼 zyq5945 的回复:
szSQL.Format("insert into 'midi' values('%s','%s','%s','%s','%s')",
  midi_time,midi_channel,midi_no,midi_vel,m_filename);

前辈,这个是表明。。也要加引号吗?

#5


引用 2 楼 r3000 的回复:
看看异常报的什么信息?

主键重复

#6


都知道是主键重复了还不知道怎么解决?

#7


szSQL.Format("insert into 'midi' values('%s','%s','%s','%s','%s')",
  midi_time,midi_channel,midi_no,midi_vel,m_filename);主键不能重复
并且语句中的引号是必须要加的

#8


可是主键没有重复啊!我为了不重复定义了多个主键
szSQL.Format("insert into 'midi' values('%s','%s','%s','%s','%s')",
midi_time,midi_channel,midi_no,midi_vel,m_filename);
这个加了‘’就失败了。。

#9


是不是设了自增字段了?
还有,我觉得那个midi是不用加''的,,因为那个是表名.

#10


可以不加,自增字段不用添加,数据库自己会添加。

#11


引用 9 楼 xladykiller 的回复:
是不是设了自增字段了?
还有,我觉得那个midi是不用加''的,,因为那个是表名.

前辈,解释下自增字段的问题吧?

#12


引用 11 楼 johnelf 的回复:
引用 9 楼 xladykiller 的回复:
是不是设了自增字段了?
还有,我觉得那个midi是不用加''的,,因为那个是表名.

前辈,解释下自增字段的问题吧?

自增字段的数据类型使用“自动编号” 
access会自动为其符值,每次加1.

#13


引用 12 楼 xladykiller 的回复:
引用 11 楼 johnelf 的回复:

引用 9 楼 xladykiller 的回复:
是不是设了自增字段了?
还有,我觉得那个midi是不用加''的,,因为那个是表名.

前辈,解释下自增字段的问题吧?

自增字段的数据类型使用“自动编号” 
access会自动为其符值,每次加1.

额,貌似不是这个问题啊。我的操作是这样的:先修改一个文件格式,然后对文件里的数据进行操作,存进数据库,这个表我已经建好了,有3个主键:midi_time,midi_no,midi_vel。文件有151行数据,我执行完程序,数据库里就是151行数据,而且和文件一模一样,但是执行完后非弹出个数据库主键的问题错误。
我是采用行读取模式,用fgets每次读取一行数据,到文件结尾feof判断退出,数据已经存到数据库里了。
就不明白为什么非得报个错。

#14


是不是程序最后多循环了一次或者根本就没有退出循环?只是因为152次插入的是151次的数据,然后异常导致你程序退出了?

#15


写一行文件做做实验就知道了

#16


引用 15 楼 jxufeng 的回复:
写一行文件做做实验就知道了

谢谢大家,毛病找到了。。索引的问题,索引名字不能乱取啊,呵呵,结账了

#1


莫沉莫沉。。。

#2


看看异常报的什么信息?

#3


            szSQL.Format("insert into  'midi ' values('%s','%s','%s','%s','%s')",
                midi_time,midi_channel,midi_no,midi_vel,m_filename);

#4


引用 3 楼 zyq5945 的回复:
szSQL.Format("insert into 'midi' values('%s','%s','%s','%s','%s')",
  midi_time,midi_channel,midi_no,midi_vel,m_filename);

前辈,这个是表明。。也要加引号吗?

#5


引用 2 楼 r3000 的回复:
看看异常报的什么信息?

主键重复

#6


都知道是主键重复了还不知道怎么解决?

#7


szSQL.Format("insert into 'midi' values('%s','%s','%s','%s','%s')",
  midi_time,midi_channel,midi_no,midi_vel,m_filename);主键不能重复
并且语句中的引号是必须要加的

#8


可是主键没有重复啊!我为了不重复定义了多个主键
szSQL.Format("insert into 'midi' values('%s','%s','%s','%s','%s')",
midi_time,midi_channel,midi_no,midi_vel,m_filename);
这个加了‘’就失败了。。

#9


是不是设了自增字段了?
还有,我觉得那个midi是不用加''的,,因为那个是表名.

#10


可以不加,自增字段不用添加,数据库自己会添加。

#11


引用 9 楼 xladykiller 的回复:
是不是设了自增字段了?
还有,我觉得那个midi是不用加''的,,因为那个是表名.

前辈,解释下自增字段的问题吧?

#12


引用 11 楼 johnelf 的回复:
引用 9 楼 xladykiller 的回复:
是不是设了自增字段了?
还有,我觉得那个midi是不用加''的,,因为那个是表名.

前辈,解释下自增字段的问题吧?

自增字段的数据类型使用“自动编号” 
access会自动为其符值,每次加1.

#13


引用 12 楼 xladykiller 的回复:
引用 11 楼 johnelf 的回复:

引用 9 楼 xladykiller 的回复:
是不是设了自增字段了?
还有,我觉得那个midi是不用加''的,,因为那个是表名.

前辈,解释下自增字段的问题吧?

自增字段的数据类型使用“自动编号” 
access会自动为其符值,每次加1.

额,貌似不是这个问题啊。我的操作是这样的:先修改一个文件格式,然后对文件里的数据进行操作,存进数据库,这个表我已经建好了,有3个主键:midi_time,midi_no,midi_vel。文件有151行数据,我执行完程序,数据库里就是151行数据,而且和文件一模一样,但是执行完后非弹出个数据库主键的问题错误。
我是采用行读取模式,用fgets每次读取一行数据,到文件结尾feof判断退出,数据已经存到数据库里了。
就不明白为什么非得报个错。

#14


是不是程序最后多循环了一次或者根本就没有退出循环?只是因为152次插入的是151次的数据,然后异常导致你程序退出了?

#15


写一行文件做做实验就知道了

#16


引用 15 楼 jxufeng 的回复:
写一行文件做做实验就知道了

谢谢大家,毛病找到了。。索引的问题,索引名字不能乱取啊,呵呵,结账了