oghab
سه شنبه 01 بهمن 1387, 18:54 عصر
با سلام
من يك AdoQuery دارم كه فيلدهاي آن در زمان اجرا مشخص ميشوند. چك باكسهايي روي فرم دارند كه با انتخاب آنها، آنها به ليست selectlist مان در adoquery اضافه ميشوند و caption هر چك باكس به جاي عنوان آن فيلد در نظر گرفته ميشود.
يك dbgrid به اين adoQuery وصل است.
من با استفاده از اين كد ميخواهم كه با كليك بر روي title هر ستون در گريد اطلاعات بر اساس آن ستون مرتب شود و براي اين كار از اين كد استفاده كردم:
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
{$J+}
const PreviousColumnIndex : integer =1;
{$J-}
begin
if DBGrid1.DataSource.DataSet is TCustomADODataSet then
with TCustomADODataSet(DBGrid1.DataSource.DataSet) do
begin
PreviousColumnIndex :=Column.Index;
if (Pos(Column.Field.FieldName, Sort) = 1) and (Pos(' DESC', Sort)= 0) then
Sort := Column.Field.FieldName + ' DESC'
else
Sort := Column.Field.FieldName + ' ASC';
end;
end;
كوئري من مشابه اين كد است. البته با تعداد فيلدهاي خيلي زيادتر
select s_no as 'code', name , family as 'Last Name' from students
مشكل اينجاست كه وقتي روي title ها كليك مي كنم. اگر title شامل چند كلمه باشد و بين آنها Space وجود داشته باشد. خطايي با اين مضمون مي دهد.
Project.Project1.exe raised exception class EoleException with message
'Arguments are of the wrong type, are out of acceptable range, or are in conflict with one onather'.
Process stopped.
Use Step or Run to continue.
اگر در يك button بنويسم
adoquery1.sort:=' Last Name ASC';
باز هم همين خطا را مي دهد.
حدس من اين بود كه مشكل با space هاي بين لغات است. مثلا فاصله بين Last Name . اگر در كوئري به جاي Last_Name براي اين فيلد خطا نمي دهد.
اما مشكل اين است كه عنوان ستونها از caption چك باكسها خوانده مي شود. و اگر عنوانهاي چك باكسها را به صورت Last_Name ظاهر خوشايندي ندارند. و هم تعداد چك باكسها بسيار زياد است و تغيير caption همه آنها زمان زيادي مي برد.
چطور مي تونم بدون حذف فاصله بين عنوانهايي كه براي فيلدها در نظر گرفتم اين مشكل را حل كنم؟
خيلي ممنون ميشم اگر راهنمايي كنيد. نياز فوري براي حل اين مشكل دارم. خودم هر چقدر سعي كردم نتونستم درستش كنم.
من يك AdoQuery دارم كه فيلدهاي آن در زمان اجرا مشخص ميشوند. چك باكسهايي روي فرم دارند كه با انتخاب آنها، آنها به ليست selectlist مان در adoquery اضافه ميشوند و caption هر چك باكس به جاي عنوان آن فيلد در نظر گرفته ميشود.
يك dbgrid به اين adoQuery وصل است.
من با استفاده از اين كد ميخواهم كه با كليك بر روي title هر ستون در گريد اطلاعات بر اساس آن ستون مرتب شود و براي اين كار از اين كد استفاده كردم:
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
{$J+}
const PreviousColumnIndex : integer =1;
{$J-}
begin
if DBGrid1.DataSource.DataSet is TCustomADODataSet then
with TCustomADODataSet(DBGrid1.DataSource.DataSet) do
begin
PreviousColumnIndex :=Column.Index;
if (Pos(Column.Field.FieldName, Sort) = 1) and (Pos(' DESC', Sort)= 0) then
Sort := Column.Field.FieldName + ' DESC'
else
Sort := Column.Field.FieldName + ' ASC';
end;
end;
كوئري من مشابه اين كد است. البته با تعداد فيلدهاي خيلي زيادتر
select s_no as 'code', name , family as 'Last Name' from students
مشكل اينجاست كه وقتي روي title ها كليك مي كنم. اگر title شامل چند كلمه باشد و بين آنها Space وجود داشته باشد. خطايي با اين مضمون مي دهد.
Project.Project1.exe raised exception class EoleException with message
'Arguments are of the wrong type, are out of acceptable range, or are in conflict with one onather'.
Process stopped.
Use Step or Run to continue.
اگر در يك button بنويسم
adoquery1.sort:=' Last Name ASC';
باز هم همين خطا را مي دهد.
حدس من اين بود كه مشكل با space هاي بين لغات است. مثلا فاصله بين Last Name . اگر در كوئري به جاي Last_Name براي اين فيلد خطا نمي دهد.
اما مشكل اين است كه عنوان ستونها از caption چك باكسها خوانده مي شود. و اگر عنوانهاي چك باكسها را به صورت Last_Name ظاهر خوشايندي ندارند. و هم تعداد چك باكسها بسيار زياد است و تغيير caption همه آنها زمان زيادي مي برد.
چطور مي تونم بدون حذف فاصله بين عنوانهايي كه براي فيلدها در نظر گرفتم اين مشكل را حل كنم؟
خيلي ممنون ميشم اگر راهنمايي كنيد. نياز فوري براي حل اين مشكل دارم. خودم هر چقدر سعي كردم نتونستم درستش كنم.