С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
2 / 2 / 0
Регистрация: 11.09.2023
Сообщений: 193

Тип параметра в SQL-запросе

17.09.2023, 19:43. Показов 1413. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот тут хорошо объяснено про SQL запросы и параметры.

Я написал код прочитав сею инструкцию и все заработало. За исключением одного.
У меня поля в базе данных АКСЕС x1, y1, z1, ... это координаты имеют тип данных вещественные числа с 10 значащими символами 3 из которых после запятой.
Согласно региональным настройкам видимо в базе данных дробная часть отделяется запятой т.е. числа вида 1234,567
Я предполагал что запись ADOQuery1.Parameters.ParamByName('px').D ataType := ftFloat; указывает тип данных в самой базе данных.

Когда я так написал и попробовал передать данные то получил ошибку не соответствие типов, видимо потому как RecInsert.X - - это строковый тип полученный после форматирования Format('%.3f', [StrToFloat(......)])
К слову RecInsert.X имет вид 1234,567 хотя исходная строка написана через точку Format('%.3f', [StrToFloat(1234.567890)])

Могли бы вы разъяснить что за тип данных мы тут указываем, тип нашей переменной в Delphi который мы потом будем присваивать? Или что?
ADOQuery1.Parameters.ParamByName('px').D ataType := ftString;
ADOQuery1.Parameters.ParamByName('px').V alue := RecInsert.X;


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
//Очистить таблицу
          ADOQuery1.Close;
          ADOQuery1.SQL.Clear;
          ADOQuery1.SQL.Add('DELETE * FROM punch');
          ADOQuery1.ExecSQL;
          //Заполняем таблицу
          ADOQuery1.Close;
          ADOQuery1.SQL.Clear;
          ADOQuery1.SQL.Add('INSERT INTO punch (x1, y1, z1, u1, sloy, tname)');
          ADOQuery1.SQL.Add('VALUES (:px, :py, :pz, :pu, :psloy, :ptname)');
          ADOQuery1.Parameters.ParamByName('px').DataType := [B]ftString[/B];
          ADOQuery1.Parameters.ParamByName('py').DataType :=[B] ftString[/B];
          ADOQuery1.Parameters.ParamByName('pz').DataType := [B]ftString[/B];
          ADOQuery1.Parameters.ParamByName('pu').DataType := [B]ftString[/B];
          ADOQuery1.Parameters.ParamByName('psloy').DataType := ftString;
          ADOQuery1.Parameters.ParamByName('ptname').DataType := ftString;
          for i := Low(arr_str_insert) to High(arr_str_insert) do begin
            getArrXYZ(arr_str_insert[i], RecInsert, flag, msg);
            if flag then begin
              ADOQuery1.Close;
              ADOQuery1.Parameters.ParamByName('px').Value := RecInsert.X;
              ADOQuery1.Parameters.ParamByName('py').Value := RecInsert.Y;
              ADOQuery1.Parameters.ParamByName('pz').Value := RecInsert.Z;
              ADOQuery1.Parameters.ParamByName('pu').Value := RecInsert.U;
              ADOQuery1.Parameters.ParamByName('psloy').Value := RecInsert.SLOY;
              ADOQuery1.Parameters.ParamByName('ptname').Value := RecInsert.TNAME;
              ADOQuery1.ExecSQL;
            end;
          end;
*****
И еще второй вопрос как обнулить индекс счетчик?
В интернете пишут так. Но у меня вылазиет ошибка синтаксиса в инструкции ALTER TABLE
Code
1
ALTER TABLE tablename AUTO_INCREMENT = 1
Delphi
1
2
3
4
5
6
7
8
9
          //Очистить таблицу
          ADOQuery1.Close;
          ADOQuery1.SQL.Clear;
          ADOQuery1.SQL.Add('DELETE * FROM punch');
          ADOQuery1.ExecSQL;
          ADOQuery1.Close;
          ADOQuery1.SQL.Clear;
          ADOQuery1.SQL.Add('ALTER TABLE punch AUTO_INCREMENT = 1');
          ADOQuery1.ExecSQL;
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.09.2023, 19:43
Ответы с готовыми решениями:

Как в SQL-запросе запросе функции (СУБД PostgreSQL) в качестве параметра передать значение textBox?
Доброго времени суток форумчане)) В СУБД PostgreSQL есть таблица Location CREATE TABLE public."Location" ( ...

Значение параметра в SQL запросе передается с кавычкой.
Здрасте! Проблема вот в чем: при передаче параметра от одного сервлета к другому значение параметра помещается в одинарные кавычки....

Как правильно указать в Sql запросе логический тип данных и тип "Дата время"?
Как правильно указывать в sql запросе логический тип и тип "дата время"? К примеру, запрос следующего вида: INSERT INTO График VALUES...

16
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
17.09.2023, 23:37
Форматировать число или дату для внесения в БД обычно не требуется, а вот для показа пользователю в привычном ему формате, очень даже рекомендуется. Счетчик - это сугубо служебное поле и менять его значение не надо. Желание изменить значение счетчика возникает у новичков, которые хотят его использовать для автоматической нумерации данных. Это поле для этого не подходит, т.к. счетчик гарантирует только уникальность числовых значений, а их непрерывность - нет.
Если все же есть непреодолимое желание сбросить счетчик в начальное состояние, то в Акцесе сделать это можно простой упаковкой БД, при условии, что данных в таблице с полем-счетчиком нет.
0
2 / 2 / 0
Регистрация: 11.09.2023
Сообщений: 193
18.09.2023, 11:32  [ТС]
Наверное я слишком расписал вопрос за которым потерялась суть вопроса. Спрошу проще.
Что означает эта запись?
ADOQuery1.Parameters.ParamByName('px').DataType :=ftString;

Она обозначает следующее: В запрос параметр 'px' вставить как строку? Так если взять в двойные кавычки " "

Но тогда получается что мой запрос приобретает вид
вставить в поле x данные из параметра px равные строке "123,45". Хотя поле x у меня в бд это float.
Я так понимаю ошибки нет т.к. SQL строку "123,45" в состоянии интерпретировать как число самостоятельно.

Когда пробовал писать
ADOQuery1.Parameters.ParamByName('px').DataType :=ftFloat;
То выдавалась ошибка не совместимость типов.
Я не понимаю почему.
Я говорю что параметр px нужно интерпретировать как число 123,45 (без кавычек). Ошибка именно несовместимость типа а не ошибка синтаксиса INSERT.

Кто нибуть может мне помочь в этом разобраться?


**********
Сейчас подумал...
Когда пробовал писать
ADOQuery1.Parameters.ParamByName('px').DataType :=ftFloat;
наверное тут нужно было передать число без форматирования его функцией Format, не обрезая значения после запятой до 3х. Вероятно оно бы в базе автоматически бы обрезалось до 3х знаков после запятой т.к. у меня указано что хранить именно 3 знака.

Надо проверить ..вопрос лишь как это число сохраняется в б.д. т.к. число до форматирования имеет вид не целого например 350 а 349,9999999, а уже после применения формат оно превращается в нормальные 350.
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,657
Записей в блоге: 21
18.09.2023, 11:36
В базе хранится просто несколько байтов - число. Как и в к-нить переменной double.
Для того, чтобы человек мог посмотреть, программа дружески форматирует его в текст.
например, в соответствии с форматами, установленными в системе. или в настройках программы.
но само число не меняется. В нем нет разделителей вообще.
То же и с параметрами. Если мы хотим передать число, то говорим - вот этот параметр - число. И присваиваем в его значение число. А не строку. Как я и писал в блоге, это избавляет нас как раз от необходимости особо форматировать строку, чтобы ее понял сервер БД. Параметр сделает это сам.

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

Отдельный компонент для одного SELECT, отдельный для другого. Для DELETE тоже свой. Сколько нужно.
0
2 / 2 / 0
Регистрация: 11.09.2023
Сообщений: 193
18.09.2023, 16:04  [ТС]
Попробовал сделать как должно быть так если передавать данные как число. Получаю ошибку "Несоответствие типов данных в выражении условия отбора" при осущетвлении запроса вставки во второй раз. Вставка второго числа.
Причем вставка первой записи появляется в базе данных.

Проверочные сообщения выводятся 3 раза так если запрос проходит 1 раз.
Числа которые переадаются в первом и во втором случае
817.6425534928789
753.2539989729739

Не могу понять в чем ошибка и почему 1 раз запрос проходит, а второй нет?

Ключевые моменты кода:
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
  TInsert = record
    X, Y, Z, U: Single;
    SLOY, TNAME: ShortString;
  end;
 
//Очистить таблицу
          ADOQuery1.Close;
          ADOQuery1.SQL.Clear;
          ADOQuery1.SQL.Add('DELETE * FROM punch');
          ADOQuery1.ExecSQL;
          //Заполняем таблицу
          ADOQuery1.Close;
          ADOQuery1.SQL.Clear;
          ADOQuery1.SQL.Add('INSERT INTO punch (y1)');
          ADOQuery1.SQL.Add('VALUES (:py)');
 
          ADOQuery1.Parameters.ParamByName('py').DataType := ftFloat;
        for i := Low(arr_str_insert) to High(arr_str_insert) do begin
            getArrXYZ(arr_str_insert[i], RecInsert, flag, msg);
            if flag then begin
              ADOQuery1.Close;
              ShowMessage('py=' + FloatToStr(RecInsert.Y)); //Для отлова ошибки
              ADOQuery1.Parameters.ParamByName('py').Value := RecInsert.Y;
              ADOQuery1.ExecSQL; 
              ShowMessage('px=' + FloatToStr(RecInsert.Y)); //Для отлова ошибки
            end;
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,657
Записей в блоге: 21
18.09.2023, 19:19
вот то что с ходу в глаза бросается
Open и Close - команды предназначенные для датасета. Т.е. в Query запрос SELECT
если там INSERT/DELETE/UPDATE нет никакого Open, соответственно и закрывать нечего

далее
при отладке мы исключаем все не относящееся и делаем стерильно чистый вариант с константами
вот что то не так с циклом ? не так со значениями? убираем и цикл и значения:
Delphi
1
2
3
4
 ADOQuery1.Parameters.ParamByName('py').Value := 1234.56789;
 ADOQuery1.ExecSQL;
 ADOQuery1.Parameters.ParamByName('py').Value := 987.654321;
 ADOQuery1.ExecSQL;
так работает?
0
2 / 2 / 0
Регистрация: 11.09.2023
Сообщений: 193
19.09.2023, 08:12  [ТС]
нет не работает. Срабатывает один раз на втором запросе выдает ошибку "Несоответствие типов данных в выражении условия отбора".

=======
Но работает так, внутри цикла. Вся база наполнилась этим числом.
Delphi
1
2
ADOQuery1.Parameters.ParamByName('py').DataType := ftString;
ADOQuery1.Parameters.ParamByName('py').Value := '123,456789';
Но не работает так:
Delphi
1
2
ADOQuery1.Parameters.ParamByName('py')[B].DataType := ftString[/B];
ADOQuery1.Parameters.ParamByName('py').Value := '123.456789';

=========
О работает еще так.
Delphi
1
2
ADOQuery1.Parameters.ParamByName('py').DataType := ftString;
ADOQuery1.Parameters.ParamByName('py').Value := 123.456789;
Выходит проблема какая то в этой точке ADOQuery1.Parameters.ParamByName('py').D ataType := ftString; когда я указываю тип float

Добавлено через 2 минуты
=========
А так не работает
Delphi
1
2
ADOQuery1.Parameters.ParamByName('py').DataType := ftFloat;
ADOQuery1.Parameters.ParamByName('py').Value := 123.456789;
Добавлено через 6 минут
Когда я парсил текстовый файл то сделал следующее т.к. StrToFloat отказывалась преобразовывать в число строку с точкой, она искала в ней запятую. Могло это создать имеющуюся проблему, мне кажется нет.
Delphi
1
2
3
4
5
  // Устанавливаем "." в качестве разделителя десятичной части
  formatSettings := TFormatSettings.Create;
  formatSettings.DecimalSeparator := '.';
 RecInsert.X := StrToFloat(Copy(str_insert, sear_cursor, key_end_pos - sear_cursor), formatSettings);
 //RecInsert.X := Format('%.3f', [StrToFloat(Copy(str_insert, sear_cursor, key_end_pos - sear_cursor), formatSettings)]);
Добавлено через 48 минут
В общем юзаю так. Несмотря на то что RecInsert.X - тип Single, поле x1 в таблице числовое, а параметр задан как строка
ADOQuery1.Parameters.ParamByName('px').D ataType := ftString; по другому не работает почему то.
Может кто подскажет в чем дело, почему когда ставишь ADOQuery1.Parameters.ParamByName('px').D ataType := ftFloat; перестает работать выдает выше указанную ошибку.

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
 TInsert = record
    X, Y, Z, U: Single;
    SLOY, TNAME: ShortString;
  end;
 
//Заполняем таблицу
          ADOQuery1.SQL.Clear;
          ADOQuery1.SQL.Add('INSERT INTO punch (x1, y1, z1, u1, sloy, tname)');
          ADOQuery1.SQL.Add('VALUES (:px, :py, :pz, :pu, :psloy, :ptname)');
          ADOQuery1.Parameters.ParamByName('px').DataType := ftString;
          ADOQuery1.Parameters.ParamByName('py').DataType := ftString;
          ADOQuery1.Parameters.ParamByName('pz').DataType := ftString;
          ADOQuery1.Parameters.ParamByName('pu').DataType := ftString;
          ADOQuery1.Parameters.ParamByName('psloy').DataType := ftString;
          ADOQuery1.Parameters.ParamByName('ptname').DataType := ftString;
          for i := Low(arr_str_insert) to High(arr_str_insert) do begin
            getRecInsert(arr_str_insert[i], RecInsert, flag, msg);
            if flag then begin
             ADOQuery1.Parameters.ParamByName('px').Value := RecInsert.X;
             ADOQuery1.Parameters.ParamByName('py').Value := RecInsert.Y;
             ADOQuery1.Parameters.ParamByName('pz').Value := RecInsert.Z;
             ADOQuery1.Parameters.ParamByName('pu').Value := RecInsert.U;
             ADOQuery1.Parameters.ParamByName('psloy').Value := RecInsert.SLOY;
             ADOQuery1.Parameters.ParamByName('ptname').Value := RecInsert.TNAME;
             ADOQuery1.ExecSQL;
            end;
          end;
[/DELPHI]
0
 Аватар для Beltar
809 / 425 / 37
Регистрация: 05.05.2022
Сообщений: 2,945
19.09.2023, 08:22
1) Не парить мозг с параметрами и делать руками, т. е. форматы вещественных и времени указывать явно. Проще будет. А вообще я о параметрах забыл, когда оказалось, что со вложенными запросами в ADO они просто не работали. Может до сих пор не работают.
2) Даже когда использовал, никогда не настраивал их тип руками. Просто создавал в дизайнере, и ЕМНИП так и оставлял, ftUnknown.
3) Юзеру можно показывать, настроив у поля DispleyFormat, если таковое есть.
4) На компонентах запросов экономить не нужно. Компы для людей, а не люди для компов. От экономии нескольких килобайт или десятков килобайт на инстансе компонента ничего не поменяется.
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,657
Записей в блоге: 21
19.09.2023, 11:09
Лучший ответ Сообщение было отмечено S0563506 как решение

Решение

Не по теме:

этот богомерзкий Access это конечно дно
чтобы его запустить, приходится час скакать с бубном
да еще и не установить ODBC драйвер, если он отличается разрядностью от установленного в системе офиса
тьфу
и в accdb мы через ODBC так и не умеем спустя 10 лет
ну есть же куча нормальных баз?? почему аксесс???
бррр


а еще у этой колобуды старческий маразм и оно очень забывчивое
вот так - не работает:
Delphi
1
2
3
4
5
6
  q2.Parameters.ParamByName('f1').DataType := ftFloat;
 
  q2.Parameters.ParamByName('f1').Value := random() * 10000;
  q2.ExecSQL();
  q2.Parameters.ParamByName('f1').Value := random() * 10000;
  q2.ExecSQL();
а вот так - работает:
Delphi
1
2
3
4
5
6
  q2.Parameters.ParamByName('f1').DataType := ftFloat;
  q2.Parameters.ParamByName('f1').Value := random() * 10000;
  q2.ExecSQL();
  q2.Parameters.ParamByName('f1').DataType := ftFloat;
  q2.Parameters.ParamByName('f1').Value := random() * 10000;
  q2.ExecSQL();
возьмите уже Firebird Embedded, или вон SQLite... )
1
2 / 2 / 0
Регистрация: 11.09.2023
Сообщений: 193
19.09.2023, 20:43  [ТС]
Пока Аксес. Это "простой" локальный проект, маленькая программулька, 20 лет назад я его уже делал на аксесе, теперь приходиться заново вспоминать delphi , вообщем можно сказать по привычке юзаю аксесс.

Спасибо за инфу. Засунул установку типов вовнутрь цикла рядом с присвоением все заработало, спасибо.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
          //Заполняем таблицу punch
          ADOQuery1.SQL.Clear;
          ADOQuery1.SQL.Add('INSERT INTO t_punch (x1, y1, z1, u1, sloy, tname)');
          ADOQuery1.SQL.Add('VALUES (:px, :py, :pz, :pu, :psloy, :ptname)');
          for i := Low(arr_str_insert) to High(arr_str_insert) do begin
            getRecInsert(arr_str_insert[i], RecInsert, flag, msg);
            if flag then begin
             ADOQuery1.Parameters.ParamByName('px').DataType := ftFloat;
             ADOQuery1.Parameters.ParamByName('py').DataType := ftFloat;
             ADOQuery1.Parameters.ParamByName('pz').DataType := ftFloat;
             ADOQuery1.Parameters.ParamByName('pu').DataType := ftFloat;
             ADOQuery1.Parameters.ParamByName('psloy').DataType := ftString;
             ADOQuery1.Parameters.ParamByName('ptname').DataType := ftString;
             ADOQuery1.Parameters.ParamByName('px').Value := RecInsert.X;
             ADOQuery1.Parameters.ParamByName('py').Value := RecInsert.Y;
             ADOQuery1.Parameters.ParamByName('pz').Value := RecInsert.Z;
             ADOQuery1.Parameters.ParamByName('pu').Value := RecInsert.U;
             ADOQuery1.Parameters.ParamByName('psloy').Value := RecInsert.SLOY;
             ADOQuery1.Parameters.ParamByName('ptname').Value := RecInsert.TNAME;
             ADOQuery1.ExecSQL;
            end;
          end;
0
2 / 2 / 0
Регистрация: 11.09.2023
Сообщений: 193
22.09.2023, 12:39  [ТС]
Параметр внутри функции в SQL запросе. Не ругается но присвоения по этому полю не проходять. Если поставить просто число то все работает.
Delphi
1
FIX(x1/:pxperehvat)
Delphi
1
2
3
 ADOQuery1.SQL.Add('SET xperehvat = :pxperehvat, n_xperehvat = FIX(x1/:pxperehvat)');
 ADOQuery1.Parameters.ParamByName('pxperehvat').DataType := ftInteger;
 ADOQuery1.Parameters.ParamByName('pxperehvat').Value := StrToIntDef(Edit2.Text, 10000);
Заносить значения Edit2.Text напрямую в строку запроса не хотелось бы.
Delphi
1
2
//Так работает но не красиво.
 ADOQuery1.SQL.Add('SET xperehvat = :pxperehvat, n_xperehvat = FIX(x1/' + IntToStr(StrToIntDef(Edit2.Text, 10000)) + ')');
Быть может нужно в этом случае по особому писать параметр?
0
 Аватар для Beltar
809 / 425 / 37
Регистрация: 05.05.2022
Сообщений: 2,945
22.09.2023, 14:21
Некрасиво ему, это еще не пробовал выражения на Си писать, у нас в инсте даже специально задания были, расшифровать код на Си. Все проще, чем гадать, как оно там в параметрах преобразуется.
0
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
23.09.2023, 10:52
Лучший ответ Сообщение было отмечено S0563506 как решение

Решение

Цитата Сообщение от S0563506 Посмотреть сообщение
Параметр внутри функции в SQL запросе. Не ругается но присвоения по этому полю не проходять.
Не работает, т.к. имена параметров в запросе должны быть уникальны. Если изменить ваш запрос так:
Delphi
1
2
3
ADOQuery1.SQL.Add('SET xperehvat = :pxperehvat1, n_xperehvat = FIX(x1/:pxperehvat2)');
ADOQuery1.Parameters.ParamValues['pxperehvat1'] := StrToIntDef(Edit2.Text, 10000);
ADOQuery1.Parameters.ParamValues['pxperehvat2'] := StrToIntDef(Edit2.Text, 10000);
то заработает, при условии, что вы допишете запрос полностью.
1
2 / 2 / 0
Регистрация: 11.09.2023
Сообщений: 193
30.09.2023, 22:29  [ТС]
Цитата Сообщение от Пытливый Посмотреть сообщение
Не работает, т.к. имена параметров в запросе должны быть уникальны. Если изменить ваш запрос так:
Спасибо. Буду занять. Действительно заработало.

Delphi
1
2
3
4
5
6
   
//Кстати еще так писать нельзя говорит не найден параметр pxperehvat1
 ADOQuery2.SQL.Add('SET x = x1 - :pxperehvat1*FIX(x1/:pxperehvat2), y = y1, .......');
 
//А так уже можно
 ADOQuery2.SQL.Add('SET x = x1 - FIX(x1/:pxperehvat2)*:pxperehvat1, y = y1, ........');
Добавлено через 26 минут
Дошел до вашего совета под каждый запрос свой элемент.

Например мне необходимо Combox наполнять значениями из базы данных, прошлая программа (первая программа) не была сильно динамичной и я наполнял Комбобокс при создании формы каждый раз переписывая запросы в одном и том же AdoQuery.

Сейчас же (2я программа) хочу производить наполнение по событию OnClick. Теперь становиться понятно что для этого действа как раз желательно иметь статический запрос сформированный прямо в конструкторе. Вероятно это действительно несколько ускорит обработку данного события.
Вы это имели виду? На динамические события вешать статические запросы если возможно или юзать параметры?
А вы так делаете вешаете на онклик наполнение чекбокса. Так если он каждый раз при клике будет делать запрос к БД, это считается нормальным стилем написания программы.

Еще прочитал на форуме про ADOCommand. Команды вроде как быстрее делать через него. Как я понял, "команды" - это то что не требует возврата данных так если обновить, удалит, вставить и т.д все кроме SELECT лучше делать через ADOCommand. Это так?
0
 Аватар для Beltar
809 / 425 / 37
Регистрация: 05.05.2022
Сообщений: 2,945
30.09.2023, 22:45
Цитата Сообщение от S0563506 Посмотреть сообщение
Так если он каждый раз при клике будет делать запрос к БД, это считается нормальным стилем написания программы.
Если объемы данных незначительны, то никаких проблем. Нормальная БД должна махом отдавать даже десятки тысяч записей. Иногда нужно делать последовательные фильтры, когда сначала выбирается одно значение, и в др. контроле заполняются нужные. Например, выбор отдела, а потом, сотрудника из работающих в нем. Ну или стандартный механизм выбора драйвера, например для видеокарты, на сайте а-му-дэ или невидии.
0
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
30.09.2023, 23:02
Цитата Сообщение от S0563506 Посмотреть сообщение
А вы так делаете вешаете на онклик наполнение чекбокса
Не существует всегда правильного и неправильно решения. В каждой ситуации есть свои нюансы.
Предположим, что в базе есть данные-справочники, они как правило заполняются разово и в дальнейшем не меняются. Очевидно, что в приложении для комбобокса эти данные достаточно получить один раз. Совсем другая ситуация с изменяемыми данными. Тут уже есть необходимость получить максимально свежие данные и следовательно запрос надо выполнять всякий раз, как возникает необходимость их отображения, а при правильном подходе уже полученные запросом данные желательно еще и обновлять с некоторой периодичностью.
1
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
01.10.2023, 01:57
Цитата Сообщение от S0563506 Посмотреть сообщение
Еще прочитал на форуме про ADOCommand. Команды вроде как быстрее делать через него. Как я понял, "команды" - это то что не требует возврата данных так если обновить, удалит, вставить и т.д все кроме SELECT лучше делать через ADOCommand. Это так?
Насчёт быстрее, это вряд ли. Но правильнее - эт-точно. Этот компонент именно для этого и был разработан.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.10.2023, 01:57
Помогаю со студенческими работами здесь

Тип DataTime в SQL-запросе
Всем доброго времени суток.Есть таблица Accounting из базы данных access Library.База данных подключена через OleDB 4.0 и созранена в...

В запросе LINQ to Entities нельзя конструировать тип сущности или сложный тип
Необработанное исключение типа "System.NotSupportedException" в EntityFramework.SqlServer.dll Дополнительные сведения: В запросе LINQ...

Ошибка: "Тип фактического параметра должен быть идентичен типу формального параметра-переменной"
Срочно! Ошибка На 21 строке головной программы выдает ошибку "Тип фактического параметра должен быть идентичен типу формального...

тип фактического параметра- переменной string[20] отличается от типа формального параметра string
почему программа при выполнении выдает ошибку:тип фактического параметра- переменной string отличается от типа формального параметра...

Проверка типа параметра в запросе
Всем привет, имеется условие запроса типа вида где (ИсторияЗаявокНаРасчет.КодТНВЭД = &КодТНВЭД или...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Old Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru