![]() |
|
![]() ![]() ![]() |
|
Yantarik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 8.8.2007 Где: г.Москва Репутация: 1 Всего: 1 |
Здравствуйте!
Я новичок в Дельфи. Не подскажите как вывести из SQL в Excel данные? Желательно с использованием ADO. Спасибо. |
|||
|
||||
pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 16 Всего: 40 |
а поискать слабо?
Поиск по ветке слова "Excel" Добавлено через 1 минуту и 51 секунду если что-то конкретное будет не получаться - спрашивай -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
Yantarik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 8.8.2007 Где: г.Москва Репутация: 1 Всего: 1 |
С этого я и начала
![]() Ничего толкового(=понятное для меня) не нашла. После чего зарегистрировалась. |
|||
|
||||
SergeBS |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 11 Всего: 22 |
Yantarik,
Идешь на delphi world, скачиваешь тамошний хелп и читаешь. Хоть что-то да поймешь, поскольку там куча разных способов. |
|||
|
||||
pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 16 Всего: 40 |
итак пример (для девушки ничего не жалко) Допустим: у тебя есть ADOQuery1 в который по запросу SQL отобраны данные и кнопка Button1. По нажатию на кнопку пишем такой код
не забываем в uses добавить ComObj P.S. код работает супер быстро, что обеспечено за счет передачи данных через вариантный массив единственное что может заторомозить - это вывод контуров таблицы XLRange.Borders.LineStyle := xlContinuous; поэтому на больших объемах данных лучше не юзать (если конечно важна скорость) -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
Yantarik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 8.8.2007 Где: г.Москва Репутация: 1 Всего: 1 |
Пока написанный выше код не использовала.
Нашла другой. После исправления параметров на свои, мне программа выдает ошибку: "Произошли ошибки во время выполнения многошаговой операции OLE DB. По возможности проверьте значения всех состояний OLE DB" Как это можно проверить? И сразу вот такой еще вопрос № 2 Не очень понимаю вот это:
То есть я понимаю: из таблицы Телефоны выбрать столбцы "Телефон", "Имя", "Улицу", "Дом", "Корпус", "Квартира", а вот что такое дальше? Это сообщение отредактировал(а) Yantarik - 14.8.2007, 12:17 |
|||
|
||||
pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 16 Всего: 40 |
insert - вставить новую запись
select - выбрать записи update - редактировать записи delete - удалить записи читаем основы SQL Добавлено через 57 секунд в каком месте? Добавлено через 5 минут и 33 секунды думаю тебе для начала пойдет это Короткий справочник по SQL P.S. ну очень короткий -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
Yantarik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 8.8.2007 Где: г.Москва Репутация: 1 Всего: 1 |
На ADOConnectionForExcel.Open; "insert - вставить новую запись читаем основы SQL" Сорри, с селектом перепутала. Про вопрос №2: В очень кратком справочнике нет опсисаия термина(или что это?) "values". Интуитивно я понимаю, что ":pName" - это переменная. НО откуда она берётся и почему перед ней ":" ? |
|||
|
||||
pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 16 Всего: 40 |
если тебе не нужен Insert, то не нужен и Values выложи лучше свой нерабочий SQL -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
Yantarik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 8.8.2007 Где: г.Москва Репутация: 1 Всего: 1 |
Как раз Insert нужен
![]()
С ошибкой мы разобрались. |
|||
|
||||
Yantarik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 8.8.2007 Где: г.Москва Репутация: 1 Всего: 1 |
И еще я не понимаю:
зачем создается еще одна таблица в базе, если мне надо, чтобы считывались данные и переносились(записывались) в Эксель? |
|||
|
||||
pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 16 Всего: 40 |
Yantarik,
получи (+1) в репутацию за новый для меня способ экспорта в Excel пусть и сочиненный не тобой и не доконца тобой понятый ![]() в базе таблиц не создается это создается именно файл Excel -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
Yantarik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 8.8.2007 Где: г.Москва Репутация: 1 Всего: 1 |
Так в том-то и дело, что у меня при переименовании таблицы создается новая таблица в базе. Возможно надо что-то "особенное" указать в Object Inspector для ADOCommandForExcel.CommandText и ADOCommandForExcel.Execute. Сейчас у меня там ссылка(не знаю, как это правильно называется) на базу. И еще один вопрос: Мне надо выгрузить всю таблицу. В селекте это *, а вот в инсерте это как описывается? Нужно ли в данном случае перечисление столбцов(их около 30-40 штук) или можно как-то похоже с селектом описать? |
|||
|
||||
pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 16 Всего: 40 |
вот она кучка проблем из твоего экспорта вылилась
можно конечно поковырять твой экспорт, но... а почему не хочешь мной описанный способ испробовать? 1. он универсален 2. не создает новых таблиц в базе 3. Не нужно перечисление столбцов -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
Yantarik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 8.8.2007 Где: г.Москва Репутация: 1 Всего: 1 |
1. Потому что я его не понимаю совсем ![]() То есть мне нужно объяснять каждую строчку ,начиная с первых 4хзначных цифр: что это откуда берется? Я не знаю, кода прописывать свою базу и т.д. Мой вариант с другой базой у меня на компе работал. Но там было перечислимое множество столбцов. Здесь же я меняю под свою базу и все - создают новую таблицу в моей базе вместо того, чтобы вывыести в эксель. |
|||
|
||||
pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 16 Всего: 40 |
но если кто-то доработает твой код до того, что тебе нужно ты получается тоже не поймешь и придется объяснять тебе нужно кому-то потом объяснить, что написано? или главное чтоб экспорт происходил? эту процедуру можно немножко доработать и использовать ее в любом проекте без изменений а понимание придет позже ну постарайся: var - переменные, const - константы и т.д. ![]() -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
Yantarik |
|
||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 8.8.2007 Где: г.Москва Репутация: 1 Всего: 1 |
А мне не нужно позже. Я хочу ПОНИМАТЬ, а не тупо списывать. ![]() Чтобы при необходимости я могла все, что нужно/захочется исправить. Что такое переменные и константы я знаю ![]() Я могу тебе написать все, что мне не понятно по твоему скрипту ![]()
Откуда взялись эти числа? Почему именно они?
Что делает это? (и сразу зачем оно нужно) и откуда взялась crHourGlass? Какое у нее значение?
Эти два тоже не понятны. Опять же откуда берутся значения после знака присвоить?
Это я так понимаю переход на новый столец? (остальное потом. думаю. что на первый раз хватит) И ГЛАВНЫЙ вопрос: ты сказал, что на больших таблицах он будет тормозить. Как ты думаешь сколько ему потребуется времени, чтобы обработать около 80.000 строк с 30-40 столбцами(в которых приемущественно строки(не цифры)) ? ![]() |
||||||||
|
|||||||||
pseud |
|
||||||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 16 Всего: 40 |
делай раз: 1. запусти Excel 2. сервис -> макрос -> редактор VisualBasic 3. View -> ObjectBrowser 4. Во второй комбобокс вбей xlWBATWorksheet, бинокль, изучи (внизу описано) 5. вбей xlContinuous - изучи эти говорящие константы я ввел именно для понимания, а мог ведь просто передать цифири
делай два: экспорт наш может длиться очень долго - покажем как юзеру на это время ЧасикиСтеклянные (HourGlass)
это свойства COM объекта, о которых дельфи ничего не знает, а мы только догадываемся. если у тебя еще открыт VisualBasic, то поковыряв его еще немножко, ты все поймешь. Впринципе в дельфи есть страничка Servers где висят объекты, которые предоставляют эти непонятности в более понятным способом. Но я их не юзал. все переменные говорящие iRowsCount - количесвто строк в Excel файле если уберешь строку
то пару секунд -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
||||||
|
|||||||
Yantarik |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 8.8.2007 Где: г.Москва Репутация: 1 Всего: 1 |
Const xlWBATWorksheet = -4167 (&HFFFFEFB9)
Member of Excel.XlWBATemplate Единственное, что я из этого поняла, что это какая-то константа в Экселе ![]() А почему у нее такое значение? Const xlContinuous = 1 Member of Excel.XlLineStyle вообще непонятное число... Зачем вводить константу равную 1? Если название этой константы в 12 раз длинее цифры 1? ![]() Как же он тогда поймет, что написано?
О чем говорит XL?
Что значит данная строчка? Еще: Я не вижу, где я должа прописать свою базу. И у меня в базе не одна таблица а около 30... И путь к эксель-файла тоже не вижу. :(((( |
||||
|
|||||
pseud |
|
||||||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 16 Всего: 40 |
а потому, что другие значения заняты другими константами
ты соврала тебе понятней так?
или так?
все переменные и константы должны быть говорящие, чтоб ты сама или кто-то после тебя могли быстро разобраться в коде. xlContinuous: xl - приставка, говорящая что мы работаем с Excel Continuous - (англ.) непрерывный. а о чем скажет цифра 1???????????? никак не поймет просто попытается вызвать указанные тобой методы если ты ошиблась хоть в одной буковке - получешь Error говорящая приставка (см.выше) - говорящая не для Delphi - ей до лампочки - говорящая для программиста iColumnsCount (говорящая переменная) i - Integer Columns - колонки Count - количество ADOQuery1 - это компонент куда ты отобрала свои данные по SQL Одним заходом? А при обычном открытии Excel ты видишь новый файл а пути его не видишь. Мы в фоне все экспортим и открываем эксель. При попытке закрыть эксель спросит - сохранить? Можно конечно и программно сохранить. -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
||||||
|
|||||||
Yantarik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 8.8.2007 Где: г.Москва Репутация: 1 Всего: 1 |
Отвлеченно:
Из-за чего может вылетать ошибка: "Операция не допускается, если объект открыт" На всякий случай: при запуске кода файл успевается открыться, а до строчки закрытия файла он не доходит. Я делаю программ ресет... То есть получается, что я его не закрываю при повторном перезапуске... Идия закрыть файл в самом начале почему-то не работает(наверное и не должна)... |
|||
|
||||
pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 16 Всего: 40 |
отвлеченно не стоит новый вопрос = новая тема да и из описания ничего не понял - код - место ошибки это работа с файлами? если да то новый вопрос причем не в эту ветку или все тот же экспорт в Excel -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
Yantarik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 8.8.2007 Где: г.Москва Репутация: 1 Всего: 1 |
Все та же работа с Excel. Я нажимаю F9, программа начинает выполняться. В процессе выполнения открывается файл(экселевский), потом зацикливается. Я ее останавливаю, что-то правлю, (когда понимаю, в чем ошибка) и запускаю заново. И после этого он выдает такую ошибку. |
|||
|
||||
Yantarik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 8.8.2007 Где: г.Москва Репутация: 1 Всего: 1 |
По поводу твоего кода.
1. Я так и не поняла, как мне прописать свою базу? ADOQuery1 описывается как TADODataSet? 2. При выполнении выскакивает пустая форма. Откуда она берется? p.s. я так полагаю, чтобы для меня переменные были говорящими надо где-то с полгода программить. ![]() Поняла, что в название переменных/констант вы вкладываете их сущность. И не поняла, зачем константа равная единице. |
|||
|
||||
pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 16 Всего: 40 |
какой метод используешь? тот что я написал? или свой? предположу: ошибка происходит из-за аварийного завершения проги, т.к. объект Excel остается подвисший и при следующей попытке его создать - еррор. Ctrl+Alt+Del - Диспетчер задач - закл.Процессы - видим висящий EXCEL.EXE - убей его а вообще чтоб такого не происходило необходима конструкция
Добавлено через 9 минут и 44 секунды ты в своем примере используешь ADODataSetSource это я полагаю DataSet в который отобраны данные для экспорта можешь использовать его же тогда в моем коде все места ADOQuery1 замени на ADODataSetSource видимо надо с нуля:
-------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
Yantarik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 8.8.2007 Где: г.Москва Репутация: 1 Всего: 1 |
||||
|
||||
Yantarik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 8.8.2007 Где: г.Москва Репутация: 1 Всего: 1 |
Ты, наверное повесишься, но я не знаю, как это делается ![]() Я изучала Паскаль, в Дельфи делала только то, что руками пишется(как в Паскале) и все визуальные возможности я только потихоньку узнаю и радуюсь. ![]() Если, конечно, понимаю как это работает и чем мне в этом плюс ![]() |
|||
|
||||
pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 16 Всего: 40 |
:(
найди хоть какую-нить книгу по дельфи, хоть по дельфи 1 и немножко полистай, а лучше множко ну или в инете побросай компонентики, пожмякай их таким основам я не возьмусь обучать не осилю раз у вас на работе дельфи, то должен найтись человек, который сможет тебе основы преподать -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
Yantarik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 8.8.2007 Где: г.Москва Репутация: 1 Всего: 1 |
Знать Дельфи и преродать(=объяснить) - это ж разные вещи.
![]() Да и я не все понимаю. Книг тоже много, но я пока не нашла не одной, которая мне была бы понятна ![]() Может это у меня мохг как-то не так устроен? ![]() Ладно, с основами я как-нибудь сама. Потихоньку... А что за пустое окно выскакивает при выполнении твоей программы? откуда оно? |
|||
|
||||
pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 16 Всего: 40 |
при создании нового проекта в дельфи, автоматом создается одна форма TForm1 поэтому при запуске проекта (F9) ты ее и увидишь на нее и надо кинуть ту самую кнопочку настоятельно рекомендую найти книгу по дельфи, что-то типа "Для чайников" "За Х дней" В них обычно не очень-то с толковостью, но хотя бы поймешь, как простой проект накидать А вообще рекомендую авторов Стив Тейксейра и Ксавье Пачеко -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
SergeBS |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 11 Всего: 22 |
Yantarik,
Как на форму кидать кнопки - читай у Фленова "Библия Делфи" Там кроме этого ничего нет, так что не запутаешься. Лучше тащи электронный вариант, чтобы через 1-2 месяца не стало жаль денег. DJVU - 3 MB, PDF - 10 MB. И не читай околотеоретических рассуждений насчет машинной логики и т.п. - помимо неточностей там еще и ошибки есть. По части теории автор либо слаб, либо косноязычен. На форуме есть раздел по компьютерной литературе. Там полно ссылок на любой вкус.
Весьма забористое чтиво. В смысле грамотно подают материал, причем более серьезный чем "кнопка на форме". Признанные гуру по Делфи (как Круглински по VC++). Но для начинающих - тяжеловата: при чтении надо понимать, а не запоминать как набор рецептов. Константы Excel - ищешь в каталоге Дельфи excel*.pas и смотришь. Группировка и названия достаточно понятны. В ссылке, что я дал - ИСЧЕРПЫВАЮЩИЕ объяснения как работать с excel - 39 статей. Со всеми твоими нынешними и будущими задачами на эту тему. И много всякого другого. 5000 статей. В DRKB - тоже 18 статей есть по excel. Не вижу в чем проблема. |
|||
|
||||
Yantarik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 8.8.2007 Где: г.Москва Репутация: 1 Всего: 1 |
SergeBS, при скачивании "Библии Дельфи" на одном из указанных сайтов антивирусник ругается на какой-то U.exe.
На других что-то я его не нашла :( Добавлено через 6 минут и 34 секунды pseud, в твоем коде есть RecordCount - вроде как количество строк. Как это работает? И если это действительно количество строк, то по какой причине может быть такое: у меня оно равно 50, а строк 80.000 с копейками. (может ли это быть из-за ограничения строк Excel-я? (у него на листе должно быть не больше 35.000 с копейками. А т.к. больше то программа берет какое-то значение, вбитое поумочанию) |
|||
|
||||
pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 16 Всего: 40 |
ADOQuery1.RecordCount
возвращает количество строк отобранных в твой набор ADOQuery1 если ты знаешь, что их там 80.000, а тебе возвращает 50, то могу лишь предположить, что строки где-то буферизуются и тебе просто возвращается количество строк на текущей "странице" выборки. -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
Yantarik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 8.8.2007 Где: г.Москва Репутация: 1 Всего: 1 |
||||
|
||||
Yantarik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 8.8.2007 Где: г.Москва Репутация: 1 Всего: 1 |
Так, у меня новая ошибка(наверное, ее надо отдельной темой)
Опять же в том же выводе в Excel появляется: "OLE error 800A03EC" И из-за нее выводятся не все данные. (из 2196 строк только 1908). Что значит сие? |
|||
|
||||
pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 16 Всего: 40 |
надо бы определить в каком месте ошибка
попробуем отловить зайди в процедуру экспорта стань на первую команду и нажми F5 - получишь красную полосу (место где прога остановится и буде ждать от тебя дальнейших действий) запусти проект F9 при попадании в процедуру Дельфи тебя выкинет в код далее жмякай F8 - это пошаговое выполнение команд цель - определить какая конкретно команда вызывает эту ошибку -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
Yantarik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 8.8.2007 Где: г.Москва Репутация: 1 Всего: 1 |
Разобралась. Я посмотрела в excel'е на какой строке останавливается, нашла эту строку через Enterprise Manager, там в этой строке в одной из ячеек стоит: <Long Text>. А оно скорей всего обозначается каким-то спецсимволом, на который и ругается программа. (На этой ячейке и вылетает) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |