Casa
Top.Mail.Ru Yandeks.Metrika
Fórum: "Bases";
Arquivo atual: 2002.01.08;
Download: [xml.tar.bz2];

Para baixo

pode haver valores de parâmetro de consulta vazios no SQL Encontre agências semelhantes


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

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



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

É possível.

Por exemplo:

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

Aqui por exemplo:

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)
Скорее :
começar
Button1.Enable:=(Sender as TEdit).Text<>""
end;
:)





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

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

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



Страницы: 1 filial inteira

Fórum: "Bases";
Arquivo atual: 2002.01.08;
Download: [xml.tar.bz2];

em cima









Memória: 0.85 MB
Hora: 0.045 c
1-22258
maquinista
2001-12-16 23:16
2002.01.08
Equação do terceiro grau.


14-22332
Noname (Andrews)
2001-11-05 16:20
2002.01.08
Moderador AJUDA !!!


1-22249
Eugene Zelikovsky
2001-12-17 13:53
2002.01.08
Como esperar por um tempo sem usar TTimer


6-22304
seduz
2001-10-11 14:09
2002.01.08
servidor cliente na Internet através de um proxy


4-22474
Slym
2001-11-02 11:25
2002.01.08
Não pode fazer um gancho ... Ajuda!





afrikaans albanês Arabic armênio azerbaijano basco belarusian Bulgarian catalão Chinês simplificado) Chinês tradicional) croata checo dinamarquês Dutch Inglês estoniano filipino Finnish French
Galego georgiano German grego crioulo haitiano hebraico hindi húngaro islandês Indonesian irlandês Italian Japanese Korean letão lituano macedónio Malay maltês Norwegian
persa polonês Portuguese romeno Russa sérvio Slovak esloveno espanhol swahili sueco tailandês turco ucraniano urdu vietnamita galês ídiche bengali bósnio
cebuano esperanto gujarati hausa hmong igbo javanês kannada khmer lao latino maori marata mongol Nepali punjabi somali tâmil telugu yoruba
zulu
Английский francês Alemão Italiano Португальский russo Espanhol