请教delphi下access数据库表的报表。 ( 积分: 200 )

  • 主题发起人 主题发起人 azyee
  • 开始时间 开始时间
A

azyee

Unregistered / Unconfirmed
GUEST, unregistred user!
我想作delphi下access数据库表的报表,排序后在另一个表里显示出来,同时要有对原表的改写功能,最后做个条形示意图.
这周是最后期限,可是我连排序都搞不定...这是我的代码:
unit Unitff2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, ExtCtrls, DBCtrls, Grids, DBGrids, StdCtrls;
type
TForm1 = class(TForm)
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
Button1: TButton;
ADOQuery1: TADOQuery;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
ADOQuery1.open
Select ttttt."学号"
FROM ":aboutdelphi: ttttt"
Order By ttttt."学号"
DESC ;
end;

end.
每次运行到
Select ttttt."学号"
就报错:missing operator or semicolon
illegal character in input file:'"' ($22)
后来我又写了个冒泡法:
unit testtest2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, ExtCtrls, DBCtrls, Grids, DBGrids, StdCtrls;
type
TForm1 = class(TForm)
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
RadioGroup1: TRadioGroup;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
max : integer;

num1 : integer;
num2 : integer;
count1 : integer;
count11 : integer;
count2 : integer;

count3 : integer;
P1 : single;
P2 : single;
a : single;
begin
max := (query1.RecordCount)/4 ;
for count1 := 1 to (max-1) do
begin

query1.First ;

for count11 := 1 to (count1 - 1) do

begin

query1.Next ;
end;

num1 := query1.fieldByName('学号').Value ;
P1 := query1.FieldByName('语文').value ;

for count2 := count1 + 1 to (max - count1) do
begin

query1.First ;
query1.MoveBy(count2 - 1);
num2 := query1.fieldByName('学号').Value ;
P2 := query1.fieldbyName('语文').Value ;

with query1 do
begin
if P1 < P2 then
begin
a = P1 ;
query1.SQL.Clear ;
query1.SQL.Add('update adv');
query1.SQL.Add('set query1.fieldByName('学号').Value = P2 where num='+inttostr(num1));
query1.SQL.Add('set query1.fieldByName('学号').Value = a where num='+inttostr(num2));
query1.ExecSQL ;
query1.SQL.Clear ;
query1.SQL.Add('select * from adv');
query1.open;
UPDATE &quot;:TAB: aaa&quot;
end;

end;

end;

end;

end;
SET ttttt.&quot;学号&quot;=P2 where num='+inttostr(num1));
SET ttttt.&quot;学号&quot;=a where num='+inttostr(num2));
end.
错误更是铺天盖地,我已经走投无路了...有高手愿意帮我吗?
 
access里查询语句必须跟表名
比如可以在SQL 2K里执行的select 'a'拿过去执行就是错的,语法问题,还有很多不同的呢,我这几个月搞它,经常被气的要死
 
还有如join后面只能直接跟表名,而不能跟子查询;还有类型不一样,还有……诶,差别还是很大的呀
 
刚刚又被老总一顿好骂,我已经糊涂了...能不能说的详细一点,比如说第一个程序应该改哪里,怎么改,还要添加哪些组件,属性怎么设?我是一点办法也没了...请大家帮帮我吧[:(]
 
access里有一个写SQL的地方,在那里调试
join要分层才行 ( () )
 
=======我为什么还失业呢?==============
 
ACCESS哪里可以写SQL啊?还有我的程序里没有用join呀?...我是个新手,学DLEPHI的数据库才不到两个礼拜,再加上ACCESS我就彻底懵了,可是老板有令我也没办法,各位前辈能否讲详细点?如果能给个范例就更好了,请大家帮帮我啊[:(]
 
你的第一个程序,至少该这样写的
//之前可以在界面上设置好AQ的属性(如Connection等)
aq.close;
//以下两句可以直接使用aq.sql.text := 'SQL语句';
aq.sql.clear;
aq.sql.add('SQL语句');
aq.open;
//查询语句使用OPEN,非查询语句使用EXCETURE
 
第二个
你那个UPDATE语句因为条件不一样,写成两个UPDATE语句吧
 
公司不让贴代码,不然就直接帮你改了
(公司还不让装ACCESS,而又要做ACCESS开发,还是自己做的个ACCESS查询分析器呢)
 
很搞笑的程序
很多莫名奇妙的东西
呵呵~
 
...不要挖苦我,我也是在很努力的学习啊...谢谢Buddy.Sun,现在的情况是:由计算机创建的ACCESS表中数据是不断变化的,我的目的是用DELPHI实现:将他们按大小排序并在另一个窗口显示出来,并显示其柱型图表.
这是我现在的程序,请帮忙我看看吧:
unit Frm_OrderBy;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, ADODB, StdCtrls;
type
TFrmOrderBy = class(TForm)
GBLIst: TGroupBox;
AQuery: TADOQuery;
ADOConn: TADOConnection;
DSQuery: TDataSource;
DBGList: TDBGrid;
CBOrder: TComboBox;
LBOrder: TLabel;
BtnOrder: TButton;
BtnClose: TButton;
CBDESC: TCheckBox;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure BtnOrderClick(Sender: TObject);
procedure BtnCloseClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
FrmOrderBy: TFrmOrderBy;
implementation
{$R *.dfm}
procedure TFrmOrderBy.FormCreate(Sender: TObject);
begin
ADOConn.ConnectionString:='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=DelphiClassical200';
AdoConn.Open;
end;

procedure TFrmOrderBy.FormShow(Sender: TObject);
var
i:Integer;
//声明变量i
begin
With AQuerydo
begin
Close;
Sql.Clear;
//清空Sql语句
Sql.Add('Select * from ord by 联络表_姓名');
//检索,准备执行SQL语句
open;
for i:=0 to DBGlist.Columns.Count-1do
//(从1到DBGlist单元格行数减一)循环执行以下语句
begin
CBOrder.Items.Add(DBGlist.Columns.Items.Title.Caption);
//将所有列添加到表中
end;
end;
CBOrder.ItemIndex:=0;
//去掉当前项索引
end;

procedure TFrmOrderBy.BtnOrderClick(Sender: TObject);
begin
With AQuerydo
begin
Close;
Sql.Clear;
Sql.Add('Select * from ord by 联络表_姓名 order By ');
// 检索
Sql.Add(DBGlist.Columns.Items[CBOrder.ItemIndex].FieldName);
//添加排序字段(CBOrder)名称字符串
if CBDESC.Checked then
// 检查降序排列(CBDESC)是否选中
begin
Sql.Add(' Desc');
//降序排列
end;
open;
end;
end;

procedure TFrmOrderBy.BtnCloseClick(Sender: TObject);
begin
Close;
//关闭
end;

end.
一运行到
AdoConn.Open;
就弹出对话框说对象打开时不允许操作,
请问怎么解决?
 
+''DBGlist.Columns.Items[CBOrder.ItemIndex].FieldName''+
 
+''DBGlist.Columns.Items[CBOrder.ItemIndex].FieldName''+是什么意思啊?能否说详细一些?
 
UP
还是不行啊请大家帮帮忙啊
 
upupupupupupupup
 
自问自答:
unit sbt7Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, Menus, StdCtrls, Buttons, Grids, DBGrids, ADODB,
ExtCtrls, TeeProcs, TeEngine, Chart, DbChart, DBCtrls, Series;
type
TMainForm = class(TForm)
Label4: TLabel;
//排序查询标示
DBGrid1: TDBGrid;
// 排序查询窗口
BitBtn2: TBitBtn;
// 按编号查询按钮
ADOConnection1: TADOConnection;
// 不可见控件
ADOQuery1: TADOQuery;
// 不可见控件
DataSource1: TDataSource;
// 不可见控件
BitBtn1: TBitBtn;
// 刷新数据按钮
BitBtn3: TBitBtn;
// 按studentno查询按钮
Database1: TDatabase;
// 不可见控件
Query1: TQuery;
// 不可见控件
DataSource2: TDataSource;
// 不可见控件
BitBtn4: TBitBtn;
// 退出按钮
ADOTable1: TADOTable;
// 不可见控件
DBGrid2: TDBGrid;
// 原表窗口
DataSource3: TDataSource;
// 不可见控件
Label1: TLabel;
// 原表标示
DBNavigator1: TDBNavigator;
// 原表控制按钮
DBChart1: TDBChart;
// 柱形图表
Series1: TBarSeries;
// 不可见控件
ADOConnection2: TADOConnection;
// 不可见控件
ADOQuery2: TADOQuery;
//不可见控件
procedure BitBtn2Click(Sender: TObject);// 按编号查询事件声明
procedure BitBtn1Click(Sender: TObject);// 刷新数据事件声明
procedure BitBtn3Click(Sender: TObject);
// 按studentno查询事件声明
procedure BitBtn4Click(Sender: TObject);
// 退出事件声明
procedure FormCreate(Sender: TObject);
// 显示柱形图表事件声明

private
{ Private declarations }
public
{ Public declarations }
end;

var
MainForm: TMainForm;
implementation
{$R *.dfm}
procedure TMainForm.FormCreate(Sender: TObject);
//显示柱形图表
begin
with ADOQuery2do
// 当 ADOQuery2执行
begin
Close;
//清空程序
SQL.Clear;
//清空SQL语言(防止前后语句冲突)
SQL.Add('SELECT name,studentno as 学号 FROM student');
//检索表‘student’中的studentno作为学号,检索表‘student’中的name.
Open;
end;
Series1.DataSource:=ADOQuery2;
//将‘ADOQuery2’赋给‘Series1’的‘DataSource’属性 (柱形图表DBChart1的数据源为ADOQuery2)
Series1.YValues.ValueSource:='学号';
//将‘学号’赋给‘Series1’中‘YValues’的‘DataSource’属性 (柱形图表DBChart1的Y轴数据源为学号)
Series1.XLabelsSource:= 'name';
//将‘name’赋给‘Series1’的‘XLabelsSource’属性 (柱形图表DBChart1的X轴数据源为name)
end;

procedure TMainForm.BitBtn1Click(Sender: TObject);
//刷新数据
begin
with ADOQuery1do
// 当 ADOQuery1执行
begin
Close;
// 清空程序
SQL.Clear;
// 清空SQL语言(防止前后语句冲突)
SQL.Add('select id as 编号, studentno as 学号,name as 学生姓名 from student');
//检索表‘student’中的id作为编号,studentno作为学号,name作为学生姓名.
Open;
end;

with ADOQuery2do
// 当 ADOQuery2执行
begin
Close;
//清空程序
SQL.Clear;
//清空SQL语言(防止前后语句冲突)
SQL.Add('SELECT name,studentno as 学号 FROM student');
//检索表‘student’中的studentno作为学号,检索表‘student’中的name.
Open;
end;
Series1.DataSource:=ADOQuery2;
//将‘ADOQuery2’赋给‘Series1’的‘DataSource’属性 (柱形图表DBChart1的数据源为ADOQuery2)
Series1.YValues.ValueSource:='学号';
//将‘学号’赋给‘Series1’中‘YValues’的‘DataSource’属性 (柱形图表DBChart1的Y轴数据源为学号)
Series1.XLabelsSource:= 'name';
//将‘name’赋给‘Series1’的‘XLabelsSource’属性 (柱形图表DBChart1的X轴数据源为name)
end;



procedure TMainForm.BitBtn2Click(Sender: TObject);//排序查询(按学生编号进行排序)
begin
with ADOQuery1do
// 当 ADOQuery1执行
begin
Close;
// 清空程序
SQL.Clear;
// 清空SQL语言(防止前后语句冲突)
SQL.Add('select id as 编号, studentno as 学号,name as 学生姓名 from student');
//检索表‘student’中的id作为编号,studentno作为学号,name作为学生姓名.
SQL.Add('order by id');
//按id进行排序
Open;
end;
end;

procedure TMainForm.BitBtn3Click(Sender: TObject);
//排序查询(按学生学号进行排序)
begin
with ADOQuery1do
// 当 ADOQuery1执行
begin
Close;
// 清空程序
SQL.Clear;
// 清空SQL语言(防止前后语句冲突)
SQL.Add('select id as 编号, studentno as 学号,name as 学生姓名 from student');
//检索表‘student’中的id作为编号,studentno作为学号,name作为学生姓名.
SQL.Add('order by studentno');
// 按studentno进行排序
Open;
end;
end;

//退出
procedure TMainForm.BitBtn4Click(Sender: TObject);
//退出
begin
Close;
// 关闭程序
end;

end.
 
后退
顶部