Головна сторінка
Top.Mail.Ru Яндекс.Метрика
Форум: "Бази";
Поточний архів: 2002.01.08;
Завантажити: [xml.tar.bz2];

Вниз

чи можуть бути в SQL порожні значення параметрів запиту Знайти схожі гілки


shakh   (2001-12-03 20:29) [0]

Доброго часу доби. Є БД (access2000). Є інтерфейс користувача (ехе). Спілкування інтерфейсу і БД відбувається через ADO і SQL-запити. Є набір форм для заповнення різних таблиць БД. При цьому, деякі Edit "и на формі можуть бути залишені порожніми, тобто не містити ніяких значень. А тепер питання: чи можна через SQL послати запит на додавання (оновлення) таблиці, якщо ДЕЯКІ ПОЛЯ даних запиту ПОРОЖНІ (field =" ") ??? В основному це стосується текстових полів.
Є звичайно варіант, щоб перевіряти значення поля на "порожнечу" і формувати запит динамічно, але якщо таких полів штук 20, то це досить громіздка конструкція виходить.



Котелок   (2001-12-04 07:35) [1]

Можна, можливо.

Наприклад:

insert into table (column1, column2) values ​​(: col1,: col2)

А потім просто параметрам привласнюєш значення тих edit-ів які повинні бути.
І якщо edit був порожній, то і вставиться теж пусте поле.



shakh   (2001-12-04 19:31) [2]

добавочка ... ну, добре. а якщо один і той же компонент AdoQuery використовується для різних запитів, то і кількість параметрів може бути різним. а якщо писати щось типу AdoQuery1.SQL.Add ( "insert into table (col1, col2) values" + Edit1.Text + "," + Edit2.text + ")"); то при порожніх значеннях в Edit1 або Edit2, вилазить помилка про неприпустиме типі змінної, або що поле не має параметра за замовчуванням; (
а тягати за собою купу статичних параметрів запиту не дуже-то хочеться



Delirium   (2001-12-04 20:08) [3]

А що, заважає передавати "порожні" значення, якщо у тебе поля, звичайно, не not Null?



Котелок   (2001-12-05 00:46) [4]

Якщо у тебе в Едіт повинні бути рядки, то спробуй ось так ...

AdoQuery1.SQL.Add ( "insert into table (col1, col2) values" + "" "" + Edit1.Text + "" "" + "," + "" "" + Edit2.text + "" "" + ") ");
З явним зазначенням, що це рядок.
Хоча через parambyname все одно надійніше.



shakh   (2001-12-05 02:08) [5]

і ще добавочка.
може я погано пояснив де собака порилася%)
є запит AdoQuery1.SQL.Add ( "insert into table (col1, col2) values ​​(" + "" "" + Edit1.Text + "" "" + "," + "" "" + Edit2.text + "" "" + ")");
тут все зрозуміло. але якщо на формі при введенні даних Edit1 (наприклад) був залишений порожнім, то при виконанні даного запиту косяком лізуть "Єгор". так ось, хотілося б від них (від error "ів) позбутися з мінімальними витратами.
писати в запит щось типу ... values ​​(: col1,: col2) - це звичайно добре, але коли полів мало, а якщо їх близько 20 штук, то створити всі ці параметри в інспекторові об'єктів і потім, не заплутавшись у великій їхній масі , присвоїти їм значення з Едіт - ось це вже номер з викрутасами.
можна навтикалі перевірок типу
if Edit1.Text <> "" then включіть_поле_в_запрос
але це ж перекрутив повний!



Котелок   (2001-12-05 03:33) [6]

Не зовсім зрозуміло, навіщо створювати в інпектор об'єктів?

Щодо перевірки на порожній edit і динамічне включення параметра в запит то це не такий вже і перекрутив, а цілком нормальне явище, хоча і нудно це кодувати.

Ось наприклад:

sqlText: = "insert into table (";
if edit1.text <> "" then
sqlText: = sqlText + "column1,"
if edit2.text <> "" then
sqlText: = sqlText + "column2,"
delete (sqlText, length (sqlText), 1);
sqlText: = sqlText + ") values ​​(";
if edit1.text <> "" then
sqlText: = sqlText + ": column1,"
if edit2.text <> "" then
sqlText: = sqlText + ": column2,"
delete (sqlText, length (sqlText), 1);
sqlText: = sqlText + ")";

AdoQuery1.close;
AdoQuery1.SQL.clear;
AdoQuery1.SQL.Add (sqlText);
AdoQuery1.ExecSql;

Ще можу запропонувати зайти в Access в конструктор таблиці в яку вставляєш і для всіх полів які можуть бути порожніми поставити параметр разрешаюшій введення порожніх рядків. І тоді перевірка на порожні поля повинна відпасти і помилки не повинні сипатся ..



Ra   (2001-12-05 14:03) [7]

Треба просто не дозволяти виконувати такий запрос.однім з двох способів
1) перед виконанням проверіть..еслі не всі поля заповнені - видавати повідомлення ...
2) або взагалі disab "лити контрол (швидше за все кнопку) поки не будуть введені всі необх данние..для етого..на все Едіти на подію OnChange повісити наступний оброблювач:

begin Button1.Enable: = (Edit1.Text <> "") and (Edit2.Text <> "") and ... end;




NDeu   (2001-12-05 14:19) [8]

> Ra © (05.12.01 14: 03)
швидше за:
починати
Button1.Enable: = (Sender as TEdit) .Text <> ""
end;
:)





Котелок   (2001-12-06 01:00) [9]

> Ra
Іноді сушествуют такі завдання, коли такий запит просто необхідний.

Я сам стикався з таким завданням, правда я використовував звичайний статичний запит з 25 полями і в таблиці був дозвіл на введення порожніх рядків.



сторінки: 1 вся гілка

Форум: "Бази";
Поточний архів: 2002.01.08;
Завантажити: [xml.tar.bz2];

наверх









Пам'ять: 0.59 MB
Час: 0.028 c
14-22417
Yuraz
2001-10-25 15:02
2002.01.08
Цікаво, Яндекс на чому крутиться (IIS ..) БД, залізо.


14-22317
Tosov
2001-10-31 23:58
2002.01.08
Delphi 6


1-22221
Кисле
2001-12-16 21:00
2002.01.08
ресурси


4-22509
Каран
2001-11-08 12:50
2002.01.08
GetkeyboardState- Що робить?


14-22327
fliz
2001-11-05 15:39
2002.01.08
а кажуть післязавтра свято?





африкаанс албанський арабська вірменин азербайджанець баскський білоруський болгарська каталонський Китайська (спрощене письмо) Китайський традиційний) хорватський чеська данську мову нідерландський Ukranian естонець Філіппінська фінську мову французький
галісійська грузинський німецький грецький гаїтянський креольський давньоєврейську хінді угорський ісландський індонезієць ірландський італійський японський корейський латиська литовець македонець малайський мальтійський норвежець
перс полірування португальська румунський російська сербський словацький словенський іспанська суахілі шведську мову тайський турецька український урду в'єтнамський валлійський ідиш бенгальський боснійський
кебуано есперанто гуджараті хауса хмонг ігбо яванський каннада кхмерская Лао латинь маорі маратхі монгольський непальська панджабі сомалійський тамільська телугу йоруба
зулуський
Англійська Французький Німецький Італійський Португальська Русский Іспанська