Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.11.09;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.005 c
2-1222666531
workbench
2008-09-29 09:35
2008.11.09
Proxy & TIdFTP


2-1222844827
SkyN
2008-10-01 11:07
2008.11.09
faultrep.dll


2-1222780763
S-Type
2008-09-30 17:19
2008.11.09
Переместиться на запись


15-1221574229
Гомер
2008-09-16 18:10
2008.11.09
Где можно скачать много примеров Delphi программ?


2-1222870861
KirillRepin
2008-10-01 18:21
2008.11.09
можно ли из OpenDialog получить имя файла и путь





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский