![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
БД На аксесе, мне нужно знать например какие нарушения совершили сотрудники от 12.12.04 по 13.04.05, неполучается это сдела и вывести например в мемо помогите вот код по которому я работаю могу дать исходник парни выручайте
Код:
procedure TForm1.Button1Click(Sender: TObject); var f:string; b:string; i:integer; begin f:=Edit1.Text; b:=Edit2.Text; i:=Datamodule2.ADOTable1.RecordCount; DataModule2.ADOTable1.First; while i>0 do begin i:=i-1; if (DataModule2.ADOTable1DSDesigner??.AsString>f) and (DataModule2.ADOTable1DSDesigner??.AsString<b) then ?? DataModule2.ADOTable1.Next; end; end; |
|
#2
|
|||
|
|||
|
А не проще сделать через запрос?
сам запрос: Код:
SELECT * FROM [Table] WHERE [DateField] > :DF AND [DateField] < :DE код Код:
var
I : Integer;
S : String;
begin
ADOQuery1.Params.PAramByName('DF').AsTDateTime := DateTimePicker1.Date;
ADOQuery1.Params.PAramByName('DE').AsTDateTime := DateTimePicker1.Date;
ADOQuery1.Open;
ADOQuery1.First;
While Not ADOQuery1.EOF Do
Begin
S := '';
For I := 0 To ADOQuery1.Fields.Count-1 Do
S := S + ADOQuery1.Fields[0].AsString + ' ';
Memo1.Lines.Add(S);
ADOQuery1.Next;
End; |
|
#3
|
|||
|
|||
|
Извените сразу не сказал я не использую ADoQuery и неочень знаком с SQL вы можете помочь может ее будет просто переделать под ADoQuery чем решить мою проблему?
|
|
#4
|
|||
|
|||
|
Ну помогите пожалуста.. я уже мозг сломал кто нибудь..
я исходник может кто нить поможет.. там есть форма вот на нее вывест нужно туда мемо добавлю а дбэдит удалю мне главное чтобы диапазон работал.. выручайте _http://zalil.ru/30003517 ну или так обьясните я сам попробую.. |
|
#5
|
||||
|
||||
|
Использовать ручной обход всех записей для решения вашей проблемы - изначально неверная постановка задачи. lmikle вам предложил хорошую альтернативу, но хозяин барин:
Код:
var
f,b:TDateTime;
begin
f := StrToDateTime(Edit1.Text);
b := StrToDateTime(Edit2.Text);
while not AdoTable1.Eof
do begin
if (AdoTable1.FieldByName('ДатаНарушения').asDateTime >= b) and
(AdoTable1.FieldByName('ДатаНарушения').asDateTime <= f)
then Memo1.Lines.Add(AdoTable1.FieldByName('ФИО').asString);
AdoTable1.Next;
end;
end; |
|
#6
|
|||
|
|||
|
Спасибо, я понимаю что это может быть легче.. но врядли для меня,
в вашем коде у меня ошибки на: while not AdoTable1.Eof и здесь.. if (AdoTable1.FieldByName( блиин..((((( |
|
#7
|
|||
|
|||
|
Цитата:
с этим разобрался но результата не дало(( |
|
#8
|
||||
|
||||
|
У вас дата в таблице каким образом хранится? Как текст или дата?
|
|
#9
|
|||
|
|||
|
как "Дата/время"
|
|
#10
|
|||
|
|||
|
Помогите.. я уже незнаю че делать, уже облазил все что можно
|
|
#11
|
|||
|
|||
|
Вы не подумайте что я не хочу ничего делать..я сделал что смог, то что немогу сделть прошу вас помоч, сам пытался найти, я выложу исходник быть может вы так пойме, здесь сделал как говорил Страдалец:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, ExtCtrls, DBCtrls, StdCtrls, ToolWin, ComCtrls;
type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
ToolBar1: TToolBar;
Edit1: TEdit;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
Button1: TButton;
Edit2: TEdit;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure CheckBox2Click(Sender: TObject);
procedure CheckBox3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2, Unit3;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
f,b:TDateTime;
begin
f := StrToDateTime(Edit1.Text);
b := StrToDateTime(Edit2.Text);
while not Datamodule2.AdoTable1.Eof
do begin
if (DataModule2.ADOTable1.FieldByName('Дата_нарушения').asDateTime >= b) and
(DataModule2.AdoTable1.FieldByName('Дата_нарушения').asDateTime <= f)
then Memo1.Lines.Add(Datamodule2.AdoTable1.FieldByName('Дата_нарушения').asString);
DataModule2.AdoTable1.Next;
end;
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
var
a:string;
begin
a:=CheckBox1.Caption;
if CheckBox1.Checked then
DataModule2.ADOTable1.Filtered:=false;
DataModule2.ADOTable1.Filter:='Нарушение='''+a+'''';
DataModule2.ADOTable1.Filtered:=true;
end;
procedure TForm1.CheckBox2Click(Sender: TObject);
var
a:string;
begin
a:=CheckBox2.Caption;
if CheckBox2.Checked then
DataModule2.ADOTable1.Filtered:=false;
DataModule2.ADOTable1.Filter:='Нарушение='''+a+'''';
DataModule2.ADOTable1.Filtered:=true;
end;
procedure TForm1.CheckBox3Click(Sender: TObject);
var
a:string;
begin
a:=CheckBox3.Caption;
if CheckBox3.Checked then
DataModule2.ADOTable1.Filtered:=false;
DataModule2.ADOTable1.Filter:='Нарушение='''+a+'''';
DataModule2.ADOTable1.Filtered:=true;
end;
end.
|
|
#12
|
||||
|
||||
|
А почему вы считаете что неработает? Вы какие значения вводите в переменные b и f и какое значение по вашему не попадает в это диапазон?
Вы пробовали пошагово выполнить и посмотреть, что и чему равно в момент сравнения? Возможно проблема как-то связано с временем которое не отображается в дате. Возможно еще, что системный формат даты несколько отличается от формата хранения в БД. Последний раз редактировалось Страдалецъ, 23.11.2010 в 17:56. |
|
#13
|
|||
|
|||
|
Дело может в том что проблема с выводом в мемо может? попробывать не в мемо а в другое что нибудь.. но я не знаю как лучше, 12.12.1990 это формат даты, он используется и в аксесе и в делфи.. вы немогля бы глянуть, хотябы попробывать сделать чтобы работало продемонстрировать(для честности не довать исходник) а я попробую сделать сам.. просто щас так выходит что это становится дя меня не реальным(
Последний раз редактировалось true, 23.11.2010 в 18:13. |
|
#14
|
|||
|
|||
|
И снова молчок..
|
|
#15
|
||||
|
||||
|
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
f,b:TDateTime;
begin
b := StrToDateTime(Edit1.Text);
f := StrToDateTime(Edit2.Text);
Datamodule2.AdoTable1.First;
while not Datamodule2.AdoTable1.Eof do begin
if (DataModule2.ADOTable1.FieldByName('Дата_нарушения').asDateTime >= b) and
(DataModule2.AdoTable1.FieldByName('Дата_нарушения').asDateTime <= f)
then Memo1.Lines.Add(DateTimeToStr(Datamodule2.AdoTable1.FieldByName(
'Дата_нарушения').Value));
Datamodule2.AdoTable1.Next;
end;
end; |