Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.09;
Скачать: CL | DM;

Вниз

Помогите упростить код и проверить правильно ли написан он....   Найти похожие ветки 

 
RaMoNeZz   (2008-09-13 00:55) [0]

Доброго времени суток! Вообщем у меня кое какие затруднение появились...
есть база, в ней имееться справочник Наименований(обычный текстовый файлик с наименованиями, для упрощения ввода данных). появилась проблема при добавлении новой записи в справочник проверить есть ли такая запись в справочнике или нет если нет добавить... я написал вот так, вроде работает, но мне кажеться что то тут не так....
 //O_o
for i:=0 to dbcombobox1.Items.Count-1 do  //считаем сколько строк в справочнике
 begin
if dbcombobox1.Items.Strings[i]=dbcombobox1.Text //проверка равен ли текст, строке
then  proverka2:=0    // если да, то проверка2 равна 0
 else proverka:=7;   // если нет, то проверка равна 7
 end;
 if (proverka=7) and (proverka2=1)  then  // если проверка равна 7 и проверка2 равна 1
 begin if application.MessageBox("Добавить запись?","В справочнике нет такой записи", mb_yesno)=id_yes // то вывдим диалоговое окошко, да или нет
 then
 dbcombobox1.Items.Add(dbcombobox1.Text); // елси да, тогда добовляем запись
dbcombobox1.savetofile("naimenovanie.dim"); сохраняю в файлик
//if d1.post.Modified then d1.post.Post;
//close;
end;
 end;
как эту кашу упростить? помогите пожалуйста


 
Andy BitOff ©   (2008-09-13 01:31) [1]

Отформатируй для начала.


 
Плохиш ©   (2008-09-13 01:32) [2]


> как эту кашу упростить?

Стереть нафик этот бред из многа букав.


 
Zeqfreed ©   (2008-09-13 01:35) [3]

function confirmInsert() : Boolean;
begin
    Result := (Application.MessageBox("Добавить запись?",
                                                           "В справочнике нет такой записи",
                                                           MB_YESNO) = id_yes);
end;

. . .
newTitle := comboTitles.Text;
filename := "naimenovanie.dim";

for i := 0 to comboTitles.Items.Count - 1 do begin
   currentTitle := comboTitles.Strings[i];
   if (currentTitle = newTitle) then Exit;

   if confirmInsert() then begin
       comboTitles.Items.Add(newTitle);
       comboTitles.SaveToFile(filename);
   end;
end;


Хотя, использовать визуальные контролы в качестве хранилища это еретично :)


 
Zeqfreed ©   (2008-09-13 01:36) [4]

Ну и, кстати, после сохранения брейк/экзит тоже надо.


 
Германн ©   (2008-09-13 01:49) [5]


> Andy BitOff ©   (13.09.08 01:31) [1]

Эт точно. Читать код в таком виде очень вредно для здоровья.


 
RaMoNeZz ©   (2008-09-13 10:38) [6]

Zeqfreed © Спасибо попробую! этот справочник просто упрощение для ввода данных...я пока учусь не ругайте сильно:)


 
RaMoNeZz ©   (2008-09-13 10:47) [7]

Вот так проще?
proverka:=1;  //сразу подрузамиваем что такого текста нет
 for i:=0 to dbcombobox1.Items.Count-1 do //считаем сколько строк в справочнике
 begin
    if dbcombobox1.Items.Strings[i]=dbcombobox1.Text //проверка равен ли текст, строке
    then begin
           proverka:=0;  
           break;
         end;
 end;
 if proverka=1 then
 begin
   if application.MessageBox("Добавить запись?","В справочнике нет такой записи", mb_yesno)=id_yes // то вывдим диалоговое окошко, да или нет
   then dbcombobox1.Items.Add(dbcombobox1.Text); // елси да, тогда добовляем запись
   dbcombobox1.savetofile("naimenovanie.dim"); сохраняю в файлик
//if d1.post.Modified then d1.post.Post;
//close;
 end;


 
Simpson ©   (2008-09-13 10:59) [8]

Если ты илспользуеш DB контролы то зачем это все?
Составь запрос "select * from someTable where stroka like "%то что нужно%"", и все. Если у тебя текстовый файл, то зачем DB контролы? точно так же можно пройтись по всему файлу

AssignFile(f,"MegaFile.txt");
Reset(f)
while(not Eof(f))or(find)do
 begin
  Readln(f,str);
  find := LowCase(str) = LowCase(someText);//не забываем сравнивать в одном регистре текст
 end;
CloseFile(f);
Result := find;

Зачем усложнять?
Помойму так

зы
Код писался просто по памяти, возможные ошибки исправляй сам.


 
sniknik ©   (2008-09-13 12:27) [9]

> Вот так проще?
вместо if proverka=1 then пишеш
if dbcombobox1.Items.indexof(dbcombobox1.Text) = -1 then
ну и выкинуть все что выше в коде (цикл).

но конечно целевое использование компонент у тебя... или это просто название, а на самом деле обычный комбобокс? ну типа раз пишешь базу то добавил db к названиям, а декларацию типа естественно не показал, типа неважно это... (как всегда в общем, все партизанят, а в итоге вместо обсуждения вопроса обсуждают что ты неправильно делаешь)


 
RaMoNeZz ©   (2008-09-13 12:49) [10]

Если ты илспользуеш DB контролы то зачем это все?
Составь запрос "select * from someTable where stroka like "%то что нужно%"", и все. Если у тебя текстовый файл, то зачем DB контролы? точно так же можно пройтись по всему файлу

dbконтролы используються у меня для добавления записей именно в таблицу  тоесть контролы настроены на таблицу а список подгружаеться из обычного файла чтоб не приходилось постоянно писать одни и те же строки, так сказать вспомогательный...
"база"-"добавить запись"-"открываеться форма", там дбэдиты и дбконтролы, в контролы загружаються файлики для упрощенки, есть одельная форма для довавления в эти файлы, весь выше код просто чтоб если ты уже добавляешь запись а в списке нет такого "наименования" то добавить чтоб заного не писать...вроде так:)


 
Simpson ©   (2008-09-13 14:49) [11]

Заведи таблицу справочник получиш все тоже только без гемора.



Страницы: 1 вся ветка

Текущий архив: 2008.11.09;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.019 c
6-1194920910
Net3
2007-11-13 05:28
2008.11.09
Научите, пожалуйста, скачивать файлы через прокси?


2-1222707635
@!!ex
2008-09-29 21:00
2008.11.09
Менеджмент мониторов


15-1221240792
java73
2008-09-12 21:33
2008.11.09
Размер файлов после компиляции


15-1221302635
Riply
2008-09-13 14:43
2008.11.09
BSOD. Посмертный дамп


2-1222845582
Armond
2008-10-01 11:19
2008.11.09
Поиск в гриде