如何用C语言删除数据库文件中的其中一条数据

如何用C语言删除数据库文件中的其中一条数据,第1张

没有自动编号?凡是删除一个语句都必须有删除的条件.

例如删除最大行的数据

delete

table

where

id

=

(select

max(id)

from

table)

上面的语句就表示删除table里id最大的.

你用易语言取出的表只是一个虚拟表.你没有自动编号的话就得删除其他字段的一个特定值.

否则你的 *** 作虽然不会报错.但是也不会成功.因为你所获得的行记录只是虚拟表的.不影响真实表数据.

想要真正删除的话就得是

delete

table

where

bt

='请删除我'

1、重建一个临时文件,把原文件内容向临时文件里拷贝,遇到要删除的内容就跳过。结束后关闭文件,用remove("原文件名")把原文件删除,用rename("临时文件名","原文件名")把临时文件名改为原文件名就OK了。

2、比如要按题面要求在原文件123.txt中删除编号为2和4的信息行,则可用以下代码实现:

//#include "stdafx.h"//If the vc++6.0, with this line.

#include "stdio.h"

#include "stdlib.h"

int main(void){

    FILE *fin,*ftp

    char a[1000]

    fin=fopen("123.txt","r")//读打开原文件123.txt

    ftp=fopen("tmp.txt","w")//写打开临时文件tmp.txt

    if(fin==NULL || ftp==NULL){

        printf("Open the file failure...\n")

        exit(0)

    }

    while(fgets(a,1000,fin))//从原文件读取一行

        if(a[0]!='2' && a[0]!='4')//检验是要删除的行吗?

            fputs(a,ftp)//不是则将这一行写入临时文件tmp.txt

    fclose(fin)

    fclose(ftp)

    remove("123.txt")//删除原文件

    rename("tmp.txt","123.txt")//将临时文件名改为原文件名

    return 0

}

用fseek函数定义流指针位置,位置需要自己计算。利用offset。然后再写入新内容覆盖旧内容。但这么做有缺陷,新内容必须和就内容一样长,否则覆盖不完全或把后面的内容也覆盖。

所以,我建议直接新建新文件写入完整的新数据,更简单。

fseek()用来移动文件流的读写位置.

1、参数stream 为已打开的文件指针,

2、参数offset 为根据参数whence 来移动读写位置的位移数。参数 whence 为下列其中一种:

SEEK_SET 从距文件开头offset 位移量为新的读写位置. SEEK_CUR 以目前的读写位置往后增加offset 个位移量.

SEEK_END 将读写位置指向文件尾后再增加offset 个位移量. 当whence 值为SEEK_CUR 或

SEEK_END 时, 参数offset 允许负值的出现.


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10017185.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存