Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RusFAQ.ru: Базы данных SQL


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Базы данных SQL

Выпуск № 266
от 18.06.2007, 17:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 436, Экспертов: 61
В номере:Вопросов: 3, Ответов: 5


Вопрос № 91180: Здравствуйте. я создал DBCtrlGrid1, который берет данные из таблицы, на нем разместил DBEdit1, который берет данные из некоторого столбца таблицы (long integer), мне необходимо сравнить это число, с некоторым (например 2007) и влучае если оно ме...
Вопрос № 91189: Здравствуйте. Почему данная программа не выводит результат? Мне сказали, что не обрабатывается запрос, почему? Текст программы в приложении Спасибо...
Вопрос № 91194: Здраствуйте! Задам еще раз вопрос. Есть столбец в таблице, который называется FIO, в нем хранятся фамилия имя отчество (например, Иванов Иван Иванович). Мне нужно получить два столбца, 1- фамилия (иванов) 2- имя отчество (иван иванович...

Вопрос № 91.180
Здравствуйте.
я создал DBCtrlGrid1, который берет данные из таблицы, на нем разместил DBEdit1, который берет данные из некоторого столбца таблицы (long integer), мне необходимо сравнить это число, с некоторым (например 2007) и влучае если оно меньше вывести запись в Label1.
я привожу код. и все работает, но ведь в DBCtrlGrid1 объект DBEdit1 -копируеться по числу записей в таблице, и соответсвенно если в первой записи число меньше то сообщение выводиться в Label1, а в последуюх записях код не работает, и надпись просто копируеться если уловие выполнено в первой записи, как можно исправить это?

или быть может, подскажете как заменить это с помощью SQL запроса, но таблицу сначало нужно отфильтровать по некоторому коду клиента (поле "kod") а затем указать на те записи которые меньше числа 2007.

ух, спасибо всем кто вникнит в вопрос, старался как можно понятнее и подробнее объяснить проблему.

Приложение:

Отправлен: 13.06.2007, 06:37
Вопрос задал: Michail_bal (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Blohin Ole
Здравствуйте, Michail_bal!
Ну дак он и не должен работать, потому что у Вас данный код срабатывает один раз только при на создании формы. Используйте другой обработчик события.
Ответ отправил: Blohin Ole (статус: 3-ий класс)
Ответ отправлен: 13.06.2007, 07:48


Вопрос № 91.189
Здравствуйте.
Почему данная программа не выводит результат? Мне сказали, что не обрабатывается запрос, почему?
Текст программы в приложении
Спасибо

Приложение:

Отправлен: 13.06.2007, 08:48
Вопрос задал: Слоква Алексей Сергеевич (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Ерёмин А.А.
Здравствуйте, Слоква Алексей Сергеевич!
У вас странным образом записан цикл вывода (while). Используйте следующую конструкцию:

while (...)
{
...
}


В вашем коде, похоже, выводится лишь <tr> (откройте html-код страницы, которая выдаётся после результата работы скрипта и посмотрите, что на самом деле вывелось).

Ну и конечно нужно проверить сам запрос. В данном случае он очень простой и нужно лишь удостовериться, что таблица index существует в данной базе данных. Кстати, чтобы узнать ошибку, по которой запрос не был выполнен, нужно после mysql_query() написать: print mysql_error(); Ну а проще проверять запросы в phpMyAdmin.

И ещё один совет: в качестве переноса строки лучше использовать не , а .

Удачи!
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин А.А. (статус: Академик)
Россия, Тула
WWW: Программирование на DELPHI
----
Ответ отправлен: 13.06.2007, 09:00

Отвечает: Alex S.R.
Здравствуйте, Слоква Алексей Сергеевич!

У Вас ошибка в записи структуры while и использовании функции mysql_fetch_array()

while($row = mysql_fetch_array($result)) :
print "<tr> ":
print "<td>".$row[0]."</td> <td>".$row[1]."</td> <td>" .$row[2]. "</td> <td>".$row[3]."</td> <td>".$row[4]."</td> <td>".$row[5]."</td> ";
print "</tr> ";

Надо переписать примерно в таком виде:

while($row = mysql_fetch_row($result))
{
print "<tr> ";
print "<td>".reset($row)."</td> <td>".next($row)."</td> <td>" .next($row). "</td> <td>".next($row)."</td> <td>".next($row)."</td> <td>".next($row)."</td> ";
print "</tr> ";
}

В чем смысл?
1. У Вас нарушена логика структуры while, плюс двоеточие после print недопустимо.
2. Функция mysql_fetch_array() возвращает в данном случае ДВУМЕРНЫЙ массив данных: первое измерение - строки возвращаемых данных (кортежи), второй - поля кортежей, - например, в Вашем случае $row может быть равно array (array('2','Иван'), array('3','Дмитрий')) и т.п. Естественно, что обращение к элементу такого массива вернет массив.

В моем примере: в цикле используется функция mysql_fetch_row(), возвращающая кортежи таблицы-результата запроса, которая вызывается до тех пор, пока она возвращает значение (иначе - конец таблицы - выход из цикла). В теле цикла формируется строка HTML-таблицы для вывода данных (я использовал функции reset() и next(), чтобы не зависеть от имен столбцов таблицы-результата запроса).
Ответ отправил: Alex S.R. (статус: 1-ый класс)
Ответ отправлен: 13.06.2007, 21:16

Отвечает: HookEst
Здравствуйте, Слоква Алексей Сергеевич!
Все у Вас нормально, только цикл while - не закрыт - пропустили endwhile;
двоеточие после print - думаю просто опечатка
а mysql_fetch_array - возвращает одномерный массив, только каждое значение дублируется так, что можно обращатся к полям как по индексу, так и по имени.
Успехов.

Приложение:

Ответ отправил: HookEst (статус: Студент)
Ответ отправлен: 14.06.2007, 10:50


Вопрос № 91.194
Здраствуйте! Задам еще раз вопрос.
Есть столбец в таблице, который называется FIO, в нем хранятся фамилия имя отчество (например, Иванов Иван Иванович).
Мне нужно получить два столбца, 1- фамилия (иванов)
2- имя отчество (иван иванович)
причем, фамилия должна разбиться по буквам, то есть каждая буква в фамилии должна храниться в своей отдельной ячейке. Например, фамилию Иванов, надо разбить по буквам: И в а н о в, И- в 1 ячейке, в - во 2 ячейке, а- в 3 ячейке и т.д.
точно также нужно поступить с именем и отчеством.
Отправлен: 13.06.2007, 09:26
Вопрос задала: Кунафина Гульназ Ильдаровна (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: LanK
Здравствуйте, Кунафина Гульназ Ильдаровна!

То что Вы хотите сделать средствами чисто SQL ANSI 92 невозможно.

Увы, Вы не указали базу данных, в которой работаете.

Единственное решение, которое возможно на стороне базы данных написать "хранимую процедуру". В которой:
1) сосчитать место первого пробела в строке
2) вырезать из строки 1)
3) вырезать из строки всё что после 1)
4) подсчитать сколько символов в фамилии (хотя это мы и так знаем из п.1) -1
5) написать запрос по 4) количество столбцов...
6) вывести

НО1! Вы получите не ДВА столбца (!!) а Иванов (6символов) + ИО т.е. 7 столбцов.

НО2! А в случае Сидоров (7символов) + ИО т.е. 8 столбцов.

НО3! А еще есть составные фамилии... Салтыков-Щедрин... Федосеева-Шукшина как Вы поймете количество столбцов?




Поэтому необходимо, если это возможно переделать Вашу таблицу в таблицу удовлетворяющую стандартам реляционных баз данных. Т.е. один столбец Ф, второй И третий О, четвертый Уникальный идентификатор.

P.S. Выход из Вашей задачи ... есть получить этот один столбец и "разобрать" его на стороне клиента программными средствами, но увы это неудобно.

P.P.S. Рекомендую прочитать книгу Мартин Грабер Введение в SQL это самая простая книга о запросах и принципах баз данных, лучше ее не видел.

из вопроса 40197< /a >
ссылки на где скачать:

http://www.az-design.ru/Support/DataBase/SQL/mnDB_SQL.shtml
http://citforum.ru
http://www.sql.ru
http://www.az-design.ru/Support/DataBase/SQL/SQL92/SQL92_toc.shtml

P.P.P.S. Напишите новый вопрос ЗАЧЕМ Вам такое надо - может мы Вам посоветуем что нибудь другое :) например сортировку набора по фамилиям... ?
---------
Пусть все будет хорошо! Давайте жить дружно! :) И будет жить еще лучше!
Ответ отправил: LanK (статус: Студент)
Ответ отправлен: 13.06.2007, 14:03
Оценка за ответ: 5


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.52 от 02.05.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное