casa
Top.Mail.Ru Yandeks.Metrika
Forum: "Basi";
Archivio attuale: 2002.01.08;
Scarica: [xml.tar.bz2];

giù

se possono esistere valori di parametri di query vuoti in SQL Trova rami simili


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

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



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

È possibile.

Per esempio:

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 и динамическое включение параметра в запрос то это не такой уж и изврат, а вполне нормальное явление, хотя и нудно это кодировать.

Ecco un esempio:

sqlText := "insert into table (";
if edit1.text <> "" allora
sqlText := sqlText + "column1,"
if edit2.text <> "" allora
sqlText := sqlText + "column2,"
delete(sqlText,length(sqlText),1);
sqlText := sqlText + ") values (";
if edit1.text <> "" allora
sqlText := sqlText + ":column1,"
if edit2.text <> "" allora
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)
Скорее :
iniziare
Button1.Enable:=(Sender as TEdit).Text<>""
fine;
:)





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

>Ra
Иногда сушествуют такие задачи, когда такой запрос просто необходим.

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



Pagine: 1 tutto il ramo

Forum: "Basi";
Archivio attuale: 2002.01.08;
Scarica: [xml.tar.bz2];

al piano di sopra















Memoria: 0.86 MB
Ora: 0.058 c
1-22088
Mikhalyov Dmitry
2001-12-19 14:58
2002.01.08
chiamata all'evento dal programma


1-22057
AlexeyV
2001-12-19 03:34
2002.01.08
Come causare un dialogo


1-22007
creepster
2001-12-17 18:09
2002.01.08
screen saver


14-22377
sudiv
2001-11-08 10:54
2002.01.08
C ++?


1-22082
Chak
2001-12-19 10:07
2002.01.08
Come passare un parametro di funzione a una DLL.





afrikaans albanese Arabic armeno Azero basco bielorusso Bulgarian catalano Cinese (semplificato) Cinese (tradizionale) croato Ceco danese Dutch Inglese estone filippina Finnish Francese
galiziano georgiano Tedesco greco Creolo haitiano ebraico hindi ungherese islandese Indonesian irlandese Italiano Giapponese Korean lettone lituano macedone Malay maltese Norwegian
persiano polacco Portoghese rumeno Russian serbo Slovak sloveno Spagnolo swahili Swedish Thai turco ucraino Urdu vietnamita gallese yiddish bengalese bosniaco
Cebuano esperanto Gujarati Hausa Hmong Igbo giavanese kannada khmer lao latino maori marathi mongolo nepali punjabi somalo tamil telugu Yoruba
zulù
Английский Francese tedesco italiano portoghese russo spagnolo