Конференция "Прочее" » Помогите упростить код и проверить правильно ли написан он....
 
  • RaMoNeZz (13.09.08 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 © (13.09.08 01:31) [1]
    Отформатируй для начала.
  • Плохиш © (13.09.08 01:32) [2]

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

    Стереть нафик этот бред из многа букав.
  • Zeqfreed © (13.09.08 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 © (13.09.08 01:36) [4]
    Ну и, кстати, после сохранения брейк/экзит тоже надо.
  • Германн © (13.09.08 01:49) [5]

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

    Эт точно. Читать код в таком виде очень вредно для здоровья.
  • RaMoNeZz © (13.09.08 10:38) [6]
    Zeqfreed © Спасибо попробую! этот справочник просто упрощение для ввода данных...я пока учусь не ругайте сильно:)
  • RaMoNeZz © (13.09.08 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 © (13.09.08 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;

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

    зы
    Код писался просто по памяти, возможные ошибки исправляй сам.
 
Конференция "Прочее" » Помогите упростить код и проверить правильно ли написан он....
Есть новые Нет новых   [134442   +15][b:0][p:0.001]