![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый вечер. Пытаюсь сделать запрос на выборку из таблицы , т.е. в заданном диапазоне дат нужно выбрать все записи с одинаковым id .
С диапазоном дат разобрался .. Код:
procedure TForm19.Button1Click(Sender: TObject);
var
d1,d2:TDateTime;
idAA:integer;
begin
d1:=(DateEdit1.Date);
d2:=(DateEdit2.Date) ;
DataModule2.ADOQueryApteka.SQL.Clear;
DataModule2.ADOQueryApteka.Active:=False;
DataModule2.ADOQueryApteka.SQL.Add('SELECT DataProdagi,idPrepar,NamPreparat FROM [AptekaProdaga] WHERE [DataProdagi] BETWEEN DateEdit1.Date and DateEdit2.Date ORDER BY NamPreparat ASC');
DataModule2.ADOQueryApteka.Parameters.ParamByName('DateEdit1.Date').Value := DateEdit1.Date; /// Ïàðàìåòð D1 ïî óìîë÷àíèþ
DataModule2.ADOQueryApteka.Parameters.ParamByName('DateEdit2.Date').Value := DateEdit2.Date; /// Ïàðàìåòð D2 ïî óìîë÷àíèþ
DataModule2.ADOQueryApteka.Active:=true;Код:
idAA:=92123134;
d1:=(DateEdit1.Date);
d2:=(DateEdit2.Date) ;
DataModule2.ADOQueryApteka.SQL.Clear;
DataModule2.ADOQueryApteka.Active:=False;
DataModule2.ADOQueryApteka.SQL.Add('SELECT DataProdagi,idPrepar,NamPreparat FROM [AptekaProdaga] WHERE [DataProdagi] BETWEEN DateEdit1.Date and DateEdit2.Date, idAA ORDER BY NamPreparat ASC');
DataModule2.ADOQueryApteka.Parameters.ParamByName('idAA').Value :=idAA;
DataModule2.ADOQueryApteka.Parameters.ParamByName('DateEdit1.Date').Value :=DateEdit1.Date; /// Параметр D1 по умолчанию
DataModule2.ADOQueryApteka.Parameters.ParamByName('DateEdit2.Date').Value := DateEdit2.Date; /// Параметр D2 по умолчанию
DataModule2.ADOQueryApteka.Active:=true;
DataModule2.ADOQueryApteka.First;понимаю что не так , как правильно help my |
|
#2
|
||||
|
||||
|
Код:
DataModule2.ADOQueryApteka.SQL.Add('SELECT DataProdagi, idPrepar, NamPreparat FROM [AptekaProdaga]');
DataModule2.ADOQueryApteka.SQL.Add('WHERE [DataProdagi] ((BETWEEN ' + d1 + ' AND ' + d2 + ') AND (idAA = ' + id)));
DataModule2.ADOQueryApteka.SQL.Add('ORDER BY NamPreparat ASC');Код:
var d1, d2, id: String; .... d1 := DateEdit1.Date; d2 := DateEdit2.Date; id := Edit1.Text; // к примеру Простыми словами, Вам в запросе должна быть строка "где дата продажи лежит в диапазоне..., и id равен такому-то". Последний раз редактировалось Guaho, 08.11.2024 в 00:08. |
|
#3
|
|||
|
|||
|
Цитата:
т.е. я правильно понимаю в моем случае Код:
var d1,d2,id: String; idAA:Integer; ...... idAA:=9212337; ///искомый id d1 := DAteToStr(DateEdit1.Date); d2 := DAteToStr(DateEdit2.Date); id :=IntToStr(idAA); в таком случае в строке Код:
DataModule2.ADOQueryApteka.SQL.Add('WHERE [DataProdagi] ((BETWEEN ' + d1 + ' AND ' + d2 + ') AND (idAA = ' + id )));Последний раз редактировалось Filen, 08.11.2024 в 10:59. |
|
#4
|
|||
|
|||
|
Да там что-то не то с кавычками и скобками.
Если не ошибаюсь, то должно быть так: Код:
DataModule2.ADOQueryApteka.SQL.Add('WHERE ([DataProdagi] BETWEEN ' + d1 + ' AND ' + d2 + ') AND (idAA = ' + id +')');а вообще, что бы было менще путаницы, я использую функцию Format: Код:
DataModule2.ADOQueryApteka.SQL.Add(Format('WHERE ([DataProdagi] BETWEEN %s AND %s) AND (idAA = %s)',[d1,d2,id]));Код:
DataModule2.ADOQueryApteka.SQL.Add(Format('WHERE ([DataProdagi] BETWEEN ''%s'' AND ''%s'') AND (idAA = %s)',[d1,d2,id])); |
|
#5
|
|||
|
|||
|
Код:
1
DataModule2.ADOQueryApteka.SQL.Add('WHERE ([DataProdagi] BETWEEN ' + d1 + ' AND ' + d2 + ') AND (idAA = ' + id +')');Код:
1
DataModule2.ADOQueryApteka.SQL.Add(Format('WHERE ([DataProdagi] BETWEEN %s AND %s) AND (idAA = %s)',[d1,d2,id]));Error.JPG истина где то рядом .. Последний раз редактировалось Filen, 08.11.2024 в 22:10. |
|
#6
|
|||
|
|||
|
А тут проблема скорее всего со значением даты.
Надо смотреть в каком формате наде ее передавать. Возможно, д.б. YYYY-MM-DD и в кавычках. Посмтотри документацию на твою БД (скорее всего это либо Access, либо MS SQL Server, судя по синтаксису в имени поля). Тогда при получении значения в переменные d1 и d2 дату надо соотв. отформатировать. Код не даю - смотри сначала в каком формате ее надо передавать. |
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Filen (11.11.2024)
| ||
|
#7
|
|||
|
|||
|
Мозг уже набекрень с этими запросами..
Пошел другим путем , через временную таблицу Код:
DataModule2.ADOQueryApteka.SQL.Clear;
DataModule2.ADOQueryApteka.Active:=False;
DataModule2.ADOQueryApteka.SQL.Add('SELECT * FROM [AptekaProdaga] WHERE [DataProdagi] BETWEEN DateEdit1.Date and DateEdit2.Date ORDER BY NamPreparat ASC');
DataModule2.ADOQueryApteka.Parameters.ParamByName('DateEdit1.Date').Value :=DateEdit1.Date; /// Параметр D1 по умолчанию
DataModule2.ADOQueryApteka.Parameters.ParamByName('DateEdit2.Date').Value := DateEdit2.Date; /// Параметр D2 по умолчанию
DataModule2.ADOQueryApteka.Active:=true;
DataModule2.ADOQueryApteka.First;
DataModule2.DAtaSourceAptVrem.DataSet.Open;
For i:=1 To kol Do Begin
DataModule2.ADOQueryAptVrem.Insert;
DataModule2.ADOQueryAptVrem.FieldByName('NamePrep').AsString:=DataModule2.ADOQueryApteka.FieldByName('NamPreparat').AsString;
DataModule2.ADOQueryAptVrem.FieldByName('IdName').Value:=DataModule2.ADOQueryApteka.FieldByName('IdPrepar').Value;
DataModule2.ADOQueryAptVrem.FieldByName('EdIzm').Value:=DataModule2.ADOQueryApteka.FieldByName('edIzm').Value;
DataModule2.ADOQueryAptVrem.FieldByName('CenaEd').Value:=DataModule2.ADOQueryApteka.FieldByName('CenEd').Value;
DataModule2.ADOQueryAptVrem.FieldByName('Obem').Value:=DataModule2.ADOQueryApteka.FieldByName('ObemEd').Value;
DataModule2.ADOQueryAptVrem.FieldByName('KolProd').Value:=DataModule2.ADOQueryApteka.FieldByName('KolProdano').Value;
DataModule2.ADOQueryAptVrem.FieldByName('ItogSumm').Value:=DataModule2.ADOQueryApteka.FieldByName('ItogoSum').Value;
DataModule2.ADOQueryApteka.Next;
end;
DataModule2.ADOQueryAptVrem.Post;
DataModule2.ADOQueryAptVrem.SQL.Clear;
DataModule2.ADOQueryApteka.Active:=False;
DataModule2.ADOQueryAptVrem.SQL.Add('SELECT * FROM AptekaVremenn WHERE [NamePrep] LIKE' + QuotedStr('%'+nP + '%'));
DataModule2.ADOQueryAptVrem.Active := True;
DataModule2.ADOQueryApteka.EXECSQL;
ShowMessage('TÔ '+IntTOStr(DataModule2.ADOQueryAptVrem.RecordCount)); //Результат
//Очищаем временную таблицу
With DataModule2.ADOQueryAptVrem do begin
DataModule2.ADOQueryAptVrem.SQL.Clear;
DataModule2.ADOQueryAptVrem.SQL.Text :='DELETE * FROM AptekaVremenn'; //удаляем SQL запросом. Намного быстрее.
Prepared :=True;
DataModule2.ADOQueryAptVrem.EXECSQL;
end;
//// Воссстанавливаем ADOQueryApteka ///////////////////
DataModule2.ADOQueryApteka.Close;
DataModule2.ADOQueryApteka.Open;
DataModule2.ADOQueryApteka.SQL.Clear;
DataModule2.ADOQueryApteka.Active:=False;
DataModule2.ADOQueryApteka.SQL.Add('Select*From AptekaProdaga Where idDat=:Id_Daty');
DataModule2.ADOQueryApteka.Active:=true;
/////////////////////////////////////////////////////////Работает 1 проход, но если повторить ошибка .. err.JPG понимаю что где то туплю 'неподецки', совсем запутался где OPEN где EXECSQL, (смешались в кучу люди кони), не сочтите за труд ![]() |
|
#8
|
|||
|
|||
|
open - когда есть возвращаемый результат, т.е. запросы SELECT
ExecSQL - когда выполняется запрос, который который не возвращает результат, т.е. INSERT, UPDATE, DELETE |