IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> повторяющиеся данные в dbgrid - ?
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Подскажите пожалуйста, как можно сделать с помощью фильтра, чтобы при вводе в dbedit, например номера 128-ас, и если такой же номер уже есть в gride, то указывалось что этот номер уже существует?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


При вводе заведомо повторяющегося значения программа не обнаруживает повтор. Но если это значение ввести еще раз, программа об этом сообщает. Почему же она выдает ошибку только со второго раза?
Если введено сразу несколько повторов, Label отображает только одно вот так например: 54|
а второго нету..
В этом коде повторение Label1.Caption+ так и должно быть?
isOk := false; Label1.Caption :=Label1.Caption+ dbSL.Strings[i] + ' | ';

Я все сделал вот таким образом:
type
TForm1 = class(TForm)

private
{ Private declarations }
arrSL: array of TStringList;
SL: TStringList;

public
{ Public declarations }
procedure CreateStrList(const T: TADOTable; sFieldName: string; i: integer);
end;

procedure TForm1.CreateStrList(const T: TADOTable; sFieldName: string; i: integer);
var s: string;
begin
T.First;
while not T.Eof do begin
s := s + ',' + T.FieldByName(sFieldName).AsString;
T.Next;
end;
arrSL[i] := TStringList.Create;
arrSL[i].Duplicates := dupIgnore;
arrSL[i].Delimiter := ',';
arrSL[i].DelimitedText := s;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
SL := TStringList.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
SL.Free;
end;

procedure TForm1.FormShow(Sender: TObject);
var i: integer;
begin
SetLength(arrSL, 0);

for i := 0 to Form1.ComponentCount - 1 do
begin
if Form1.Components[i] is TADOTable then
begin
SetLength(arrSL, Length(arrSL) + 1);
CreateStrList(Form1.Components[i] as TADOTable, 'txt', Length(arrSL) - 1);
end;
end;
end;

procedure TForm5.ADOTable1BeforePost(DataSet: TDataSet);
var
dbSL, findSL: TStringList;
i: integer;
isOK: boolean;
filterStr: string;
const
ORstr: array[boolean] of string = (' OR ', '');
begin
dbSL := TStringList.Create;
dbSL.Delimiter := ',';
dbSL.DelimitedText := DBEdit3.Text;

findSL := TStringList.Create;
findSL.Duplicates := dupIgnore;

isOK := true;
for i := 0 to dbSL.Count - 1 do begin
if SL.IndexOf(dbSL.Strings[i]) > -1 then begin
isOk := false; Label1.Caption := dbSL.Strings[i] + ' | ';
findSL.Add(dbSL.Strings[i]);
end;


if isOK then begin
for i := 0 to dbSL.Count - 1 do begin
SL.Add(dbSL.Strings[i]);
end;
end
else begin
filterStr := '';
for i := 0 to findSL.Count - 1 do begin
filterStr := filterStr + ORstr[i = 0] +
'([txt] LIKE *' + findSL.Strings[i] + '*) ';

end;
DataSet.Cancel;
ADOTable1.Filtered := False;
ADOTable1.Filter := filterStr;
ADOTable1.Filtered := True;

Abort;

end;
dbSL.Free;
end;
end;


Большая просьба показать мне в чем я допустил ошибку

Сообщение отредактировано: 1147 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
1147   повторяющиеся данные в dbgrid - ?   20.07.2009 4:00
volvo   Проверяй наличие введенного значения в БД по событ…   20.07.2009 4:43
1147   при выходе из dbedita, данные заносятся в grid. та…   20.07.2009 5:28
volvo   Ага, особенно если при выходе ты проверишь и удали…   20.07.2009 16:12
volvo   Кстати, самый правильный вариант решения этой зада…   20.07.2009 22:44
1147   С индексируемым полем здесь как раз и не получится…   20.07.2009 23:46
volvo   Так тебе НИКТО не покажет, что такое значение уже …   20.07.2009 23:55
1147   Понятно.. может быть можно как нибудь таким образо…   21.07.2009 0:43
volvo   И чего тебе это даст? Вот в таком случае, например…   21.07.2009 0:59
1147   Просто с запятыми удобнее всего было в одну ячейку…   21.07.2009 2:56
volvo   Ну, смотри, чего я наваял: 1) в классе формы есть …   21.07.2009 4:45
1147   Все работает замечательно. 1 вопрос: когда обнару…   2.08.2009 21:11
volvo   Нет, но обозначить - не проблема: procedure TForm1…   2.08.2009 21:45
1147   Да, повторно введенные значения появляются в Label…   2.08.2009 22:21
volvo   Запрос на фильтрацию правильно составь... Вот это …   2.08.2009 22:59
1147   добавил в конце findsl.free; но похоже не правиль…   3.08.2009 0:21
volvo   Эта ошибка не связана с findSL. Что-то там у тебя …   3.08.2009 0:37
1147   Ошибка появляется при нажатии кнопки с кодом: if f…   3.08.2009 0:54
volvo   Слушай, а у тебя поле тоже txt называется? Или мож…   3.08.2009 1:16
1147   Совершенно верно :good: Ошибка возникала по этой …   3.08.2009 1:27
volvo   ADOQuery в помощь: // настроишь AdoQuery1 в Design…   3.08.2009 2:39
1147   Вынужден вернуться к первому вопросу( Обнаружились…   3.08.2009 5:31
volvo   Все, мои телепатические способности иссякли, я не …   3.08.2009 16:26
Гость   Большое спасибо, но проблему удалось решить своими…   3.08.2009 18:28
1147   Вопрос по дубликатам: при нажатии на кнопку появля…   6.08.2009 3:50
volvo   Добавить значение по умолчанию. Или в самой базе, …   6.08.2009 4:25
1147   Index-это получается столбец "Фамилия" н…   6.08.2009 17:50
volvo   Заметь, это ты написал: , откуда я знаю, что там у…   6.08.2009 19:14
1147   При обнаружении повторяющегося значения, программа…   26.08.2009 16:01
volvo   При удалении значения заодно просматривай список, …   26.08.2009 16:30
1147   удалять сразу в formshow или на кнопку удаления по…   26.08.2009 17:07
volvo   В тот момент, когда удаляешь значение из базы - уд…   26.08.2009 17:23
1147   Удалять значения из списка при удалении из базы не…   26.08.2009 18:27
1147   кто-нибудь объясните, что такое index и lines…   28.08.2009 22:26
volvo   Что значит "что такое"? Ну, смотри: в St…   28.08.2009 22:59
1147   Еще с удаляемой строкой не совсем понятно. В созда…   30.08.2009 0:36
volvo   Ну, ты ж выше написал:, то есть, значение, которое…   30.08.2009 0:41
1147   еще 1 вопрос по поводу дупликатов: в случае если е…   2.09.2009 7:46
volvo   Для начала неплохо бы объяснить, дубликаты ГДЕ буд…   2.09.2009 12:07
1147   Поля никак не связаны, поэтому искать нужно в кажд…   2.09.2009 12:25
volvo   Тогда не вижу проблемы. Почти... Потом поймешь, по…   2.09.2009 14:41
1147   Можно ли сделать так чтобы если например номер 555…   23.10.2009 22:57
volvo   Можно. Как - не спрашивай, я тебе ответить смогу в…   23.10.2009 23:07
1147   да это не я не научился. в процессе работы люди по…   23.10.2009 23:15
1147   Можно ли обновлять стринг лист нужного столбца что…   16.11.2009 20:15
volvo   Ну да, там в заголовке надо поменять: procedure Cr…   16.11.2009 20:52
1147   При вводе заведомо повторяющегося значения програм…   18.11.2009 5:20
1147   Такое впечатление что данные заносятся в SL не при…   18.11.2009 5:59
Крастb   If DataModule3.Table5.Locate('St_uch',…   30.11.2009 10:33


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 24.04.2024 5:44
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name