Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 15.01.2014
Сообщений: 34

Как улучшить функцию

07.11.2015, 20:16. Показов 1065. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вообщем вопрос такой, написал класс базовый(описывает функции для работы с таблицами) там есть функция для добавления записей в таблицу.Она работает, но я думаю можно как то оптимизировать её но не знаю как.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
function TModel.insertRecord(values: array of string): boolean;
var i,count:integer;
parametrSQL:string;
par:array [0..15] of string;
begin
    // Проверка на пустоту
   if(values[0]='') then  begin result:=false; exit;end;
   if(values[1]='') then  begin result:=false; exit;end;
   //Проверка существования таких полей как id и имя
   if(existId(values[0])) then begin result:=false; exit;end;
   if(existName(values[1])) then  begin result:=false; exit;end;
   getAll;
   //Получаем количество полей
   count:=query.Fields.Count;
   //sql запрос для вставки, с параметрами
   parametrSQL:= createInsertSQL;
   //Добавляем имена параметров
   for I := 0 to count-1 do begin
    par[i]:=query.Fields[i].FullName;
   end;
   //Выполняем запрос
   with Self.query do begin
    Close;
    SQL.Clear;
    SQL.Add(parametrSQL);
    for I := 0 to Count - 1 do begin
      ParamByName(par[i]).Value:=values[i];
    end;
    ExecSQL;
    Self.getAll;
    result:=true;
  end;
end;
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//генерирует параметризированый запрос sql
function TModel.createInsertSQL: string;
var count,I:integer;
sql,fields,params:string;
begin
 count:=self.query.Fields.Count;
for I := 0 to count-1 do begin
    fields:=fields+self.query.Fields[i].FullName+',';  //Поля таблицы
    params:=params+':'+self.query.Fields[i].FullName+','; //Параметры для вставки
end;
 Delete(fields,Length(fields),1); //Удаляем полесднюю запятую
 Delete(params,Length(params),1); //Удаляем полесднюю запятую
 //Готовый sql запрос
 sql:='insert into '+self.TABLE_NAME+' ('+ fields+')'+' values('+params+')';
 result:=sql;
end;
Добавлено через 1 минуту
Компонент query это поле класса
var query: TIBQuery;
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.11.2015, 20:16
Ответы с готовыми решениями:

Улучшить функцию
Доброго времени суток, друзья. Я написал вот такую вещь: template<typename Type> Type Response(Type Variable1, Type Variable2, Type...

Нужно улучшить функцию шифрования
Здравствуйте. Я тестировал свою программу шифрования, которая шифрует файл используя пароль. Так вот: Программа крашится, если размер...

Помогите улучшить неведомую функцию
Помогите найти хорошую реализацию!!!! Если вам не понятно что делает функция тогда игнорируйте данную тему. А кто понял жду, может кто и...

10
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
07.11.2015, 20:24
а self-то тут зачем ?
и что такое getAll ?
0
1 / 1 / 0
Регистрация: 15.01.2014
Сообщений: 34
07.11.2015, 20:33  [ТС]
mss, getAll - простой запрос на выборку всех полей, чтоб получить количество их
а self это указатель на query, привых явно указывать...

Добавлено через 4 минуты
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TModel.SQL(query: string);
begin
  with Self.query do
  begin
    Close;
    SQL.Clear;
    SQL.Add(query);
    Open;
  end;
end;
Delphi
1
2
3
4
procedure TModel.getAll;
begin
  Self.SQL('select * from ' + Self.TABLE_NAME);
end;
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
07.11.2015, 20:43
Цитата Сообщение от Андрей Щукин Посмотреть сообщение
запрос на выборку
Какая нафих выборка, если имя метода "insertRecord" явно говорит о вставке записи в контейнер, а не о каких-то там выборках ?

Цитата Сообщение от Андрей Щукин Посмотреть сообщение
self это указатель на query
Что за ересь ?
Self - указатель на текущий экземпляр, в данном случае экземпляр класса TModel, а не указатель на query

Не по теме:

Рановато ты заговорил про MVC

0
1 / 1 / 0
Регистрация: 15.01.2014
Сообщений: 34
07.11.2015, 20:49  [ТС]
mss, Да, классы в делфи я плохо пока что знаю.Да вы правы выборка не нужна, но у меня там была проблемка(поля было совершенно не те). щас исправил.Ну сути это не меняет, можно ли какнибудь оптимизировать эту функцию?
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
07.11.2015, 20:57
А что тебя в ф-ции смущает ?
0
1 / 1 / 0
Регистрация: 15.01.2014
Сообщений: 34
07.11.2015, 20:58  [ТС]
mss, Этот цикл ведь можно как то сделать без него....
Delphi
1
2
3
for I := 0 to count-1 do begin
    par[i]:=query.Fields[i].FullName;
   end;
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
07.11.2015, 21:00
Конечно можно. И даже нужно.
0
1 / 1 / 0
Регистрация: 15.01.2014
Сообщений: 34
07.11.2015, 21:02  [ТС]
mss, Вот именно это я и хочу исправить ток незнаю как...Т.к мы делаем
Delphi
1
2
Close;
    SQL.Clear;
Имена полей уже не достать будет
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
07.11.2015, 21:04
Лучший ответ Сообщение было отмечено Андрей Щукин как решение

Решение

Цитата Сообщение от Андрей Щукин Посмотреть сообщение
Имена полей уже не достать будет
А зачем их нужно доставать ?
Имя таблицы тебе известно заранее, значит заранее известны и имена ее полей.
0
1 / 1 / 0
Регистрация: 15.01.2014
Сообщений: 34
07.11.2015, 21:10  [ТС]
mss, Спасиб, понял как оптимизировать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.11.2015, 21:10
Помогаю со студенческими работами здесь

Как улучшить?
Доброго всем дня. Напилил простую страничку 404. Как вы думаете, как ее можно улучшить, только при помощи html и css? ...

Как улучшить
Я самоучка, сам мало что знаю по поводу красивого кода. А на работу хотелось бы т к денег нет. Посоветуйте как улучшить данный код что б...

Как улучшить СЕРП
В принципе заказчик доволен, все норм, но мне бы хотелось мнения общества. Сайт практически весь из НЧ запросов из-за региональности....

Как улучшить код?!
Написал код к заданию: Дан целочисленный массив размера N. Если он является перестановкой, то есть содержит все числа от 1 до N, то вывести...

Как улучшить пинг
может я не ошибся по разделам. Мне интересно,как улучшить пинг,будь то софтом или параметрами.. у меня скрость 128кбит\сек,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru