Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» MsSql And C++ Builder

Автор: BigBoBo1
Дата сообщения: 28.05.2003 11:46
1 Проблема
Формирую строку для Query
DataModule2->ADOQueryTemp->SQL->Add("SELECT ISNULL(Medicine,0) as Medicine FROM ORDERDETAIL WHERE Medicine = "+SeekValue[0]+" AND OrderTitle = "+DataModule2->ADOTableOrderDetail->FieldByName("OrderTitle")->Value+" AND PriceOfWholeSell = "+SeekValue[4]+" AND PriceOfRetail = "+SeekValue[5]);

SeekValue - массив типа Varant.

Выдает собщение об ошибке - Мол типа ошибка в строке после запятой.
Есть подозрения что SeekValue[5] = 5,1, а MsSQL в запросах использует формат 5.1.

Кто что об этом думает помогите.
Автор: Tishka
Дата сообщения: 28.05.2003 15:53
Может быть, в этом случае нужно заменить ',' на '.'. к тому же, я не уверен, что все SeekValue сами преобразуются в строки. А в FieldByName("OrderTitle")->Value вместо Value лучше написать AsString.

Автор: Bloody_Nokia_Adept
Дата сообщения: 28.05.2003 16:00
BigBoBo1

Цитата:
Кто что об этом думает помогите

Хорошим тоном есть использование динамических переменных, тогда и подобных проблем не будет.

В самом запросе на месте переменных ставишь '?', а потом на их место биндишь реальные значения. Сразу убьешь двух зайцев:
1. не будет проблем с преобразованием (все за тебя сделают ado + mssql)
2. однотипные запросы будут быстрее выполняться, т.к. у СУБД уже имеется план их выполнения останется лишь подставить реальные значения и все!
Автор: Thomas78
Дата сообщения: 06.05.2004 12:08
А можно пример соединения и запроса типа SELECT * from table, в борланде с mssql?

Автор: ShIvADeSt
Дата сообщения: 06.05.2004 23:47
Thomas78
Конечно можно. Создаешь в BDE связь типа MSSQL со своим скл сервером, указываешь какую базу из него юзать, потом в sqlquery в databasename указываешь название этого соединения, а потом в совйстве sql пишешь запрос запускаешь наслаждаешься, если что не понятно опишу все пошагам.
Автор: Thomas78
Дата сообщения: 07.05.2004 07:52
ShIvADeSt



Цитата:
Создаешь в BDE связь типа MSSQL со своим скл сервером,



Не получается... Запускаю BDE Administrator -> New -> MSSQL
Появляется слева MSSQL1, а справа definition, там можно отредактировать некоторые настройки, типа Aplication name, database name, user name and etc...


У меня получается с MySQL так: нажимаю вкладку dbExpress, там выбираю SQL connection, и в ёё настройках(Connection name) MySQL, ну дальше уже не важно...
Хотел добавить туда же MSSQL, но не получается...
Автор: ShIvADeSt
Дата сообщения: 08.05.2004 00:12
Объясняю подробно, так как с MySQL не работал, а вот с MSSQL работаю. Первое запускаешь BDE. Потом New->MSSQL. Потом в свойствах server (или что вроде этого сейчас под рукой нет BDE в понедельник уточню) пишешль имя своего сервера с MSSQL, как у нас например SQL сервер стоит на компе н-р назыввается SERVER так вот там прописываешь SERVER, потом в поле Databse Name пишешь название базы с которой ты хочешь рабоать н-р MyCoolBase, также можешь прописать имя пользователя, под которым будешь конектится. Все по настройке в BDE, теперь заходишь в билдер, там кидаешь на форму компонент SQLQuery, у него в свойствах DatabaseName выбираешь MSSQL1, как у тебя названо соединение в BDE, потом в свойствах SQL пишешь свой запрос, свойство Actiove делаешь равным true у тебя должно возникунть окно с запросом пароля, вводишь его и все твой запрос обрабатывается SQL сервером. Если что опять не понятно пиши, я отвечу письмом с программой которая работает с SQL сервером.
Автор: Arion
Дата сообщения: 08.05.2004 08:26
Я вот только одно не пойму, зачем при работе с MSSQL использовать BDE. Какой в этом смысл, когда есть ADO и оно специально под него заточено, соответственно имеем большую производительность и поддержку со стороны операционной системы (нач. с Win2K).

Добавлено

Цитата:
Есть подозрения что SeekValue[5] = 5,1, а MsSQL в запросах использует формат 5.1

Формат представления чисел, дат и т.п. зависит от языка, выбираемого при создании пользователя MSSQL, если выбрать русский - все будет работать нормально.
Автор: Thomas78
Дата сообщения: 11.05.2004 07:46
ShIvADeSt


Ок... буду полностью описывать:

Запустил борланд с++ builder 6 -> database -> explore ->
object -> BDE Administrator -> object -> New -> MSSQL ->
Далее появляется слева MSSQL и справа Definition, в них проставляю
следущие параметры:
Application name: kmb
Database name: kmb
host name: localhost
user name: user

Всё остальное, оставляю как есть...
Далее в закладках BDE -> Query:
DataBasename -> MSSQL
Active -> True
Далее идёт типа соединение, после чего выдаёт:
BDE Error: 11277 [0x2C] [0x D]
Cannot locate or connect to SQL server.

Добавлено
Arion


Цитата:
Я вот только одно не пойму, зачем при работе с MSSQL использовать BDE. Какой в этом смысл, когда есть ADO и оно специально под него заточено, соответственно имеем большую производительность и поддержку со стороны операционной системы (нач. с Win2K).



Действительно попробывал с помощью АДО компонента, сразу получилось... Посмотрим, как дальше будет...

Добавлено
Arion


А как сделать, чтоб при выводе текста, он показывал не поле MEMO, а нормальный текст?
Автор: Arion
Дата сообщения: 11.05.2004 12:39

Цитата:
А как сделать, чтоб при выводе текста, он показывал не поле MEMO, а нормальный текст?

Либо вручную (ADOQuery1.FieldByName('myField').AsString), либо использовать в качестве поля вывода DBMemo.
Автор: ShIvADeSt
Дата сообщения: 11.05.2004 23:46
Thomas78

Цитата:
host name: localhost

надо не хостнэйм а server name, тогда все нормуль.

Цитата:
А как сделать, чтоб при выводе текста, он показывал не поле MEMO, а нормальный текст?


Цитата:
Либо вручную (ADOQuery1.FieldByName('myField').AsString), либо использовать в качестве поля вывода DBMemo.

Лучше всего второе, так как мемо обычно длинное
Автор: Thomas78
Дата сообщения: 12.05.2004 08:00

Цитата:
либо использовать в качестве поля вывода DBMemo.


Как его использовать? Где и что нужно изменить?
Автор: ShIvADeSt
Дата сообщения: 12.05.2004 23:42

Цитата:
Как его использовать? Где и что нужно изменить?

Ничего менять не надо. Кидаешь на форму DataSource, в свойстве DataSet выбираешь свой ADO(Sql)Query. Потом кидаешь на форму DBMemo, там в качестве DataSource выбираешь свою DataSource, а в свойстве DataField выбираешь поле, которое хочешь связать с Мемо. А вообще в примерах должны идти хорошие программки для разбирания принципов работы, я по ним учился, но еслит что спрашивай дальше, программирование СУБД дело интересное
Автор: Thomas78
Дата сообщения: 13.05.2004 12:07
ShIvADeSt
C DBMemo понятно, сделал тоже самое DBGrid, не получается...


Цитата:
А вообще в примерах должны идти хорошие программки для разбирания принципов работы, я по ним учился, но еслит что спрашивай дальше, программирование СУБД дело интересное


гляну...
Автор: ShIvADeSt
Дата сообщения: 13.05.2004 23:46

Цитата:
сделал тоже самое DBGrid

Thomas78
А так тебе надо чтобы в dbgrid поля мемо отображались с тектом? Это ИМХО никак, кроме как попробовать создать внутри ячейки DBMemo или породить свой класс, но я не пробовал, поэтому не буду советовать.
Автор: Thomas78
Дата сообщения: 14.05.2004 07:52
ShIvADeSt


Цитата:
так тебе надо чтобы в dbgrid поля мемо отображались с тектом?

В тех же примерах билдера, отображаются же...



Автор: ShIvADeSt
Дата сообщения: 16.05.2004 23:43

Цитата:
В тех же примерах билдера, отображаются же...

Проверял на Дельфи 6, не отображается пишется вместо текста Мемо. Какая база данных там используется, чтобы проверить и если сможешь потом дай исходники проекта.
Автор: Thomas78
Дата сообщения: 17.05.2004 08:30
ShIvADeSt


Цитата:
Проверял на Дельфи 6, не отображается пишется вместо текста Мемо. Какая база данных там используется, чтобы проверить и если сможешь потом дай исходники проекта.


Не очень понял, о какой базе идёт речь... И какие исходники дать...
Вот пример билдера: папка_билдера_\Examples\DBTasks\CtrlGrid
Борланд Билдер с++ 6.0.
Если нету могу на почту кинуть...



Цитата:
Либо вручную (ADOQuery1.FieldByName('myField').AsString),


Что-то не понял, это где и как? Я на форму кинул ADODataSet1...


Автор: Arion
Дата сообщения: 17.05.2004 17:48

Цитата:
Что-то не понял, это где и как?

Это значит - вручную рисовать на canvas грида требуемую строку. Метод этот муторный и особого счастья не приносит.
Автор: ShIvADeSt
Дата сообщения: 17.05.2004 23:49

Цитата:
Не очень понял, о какой базе идёт речь... И какие исходники дать...
Вот пример билдера: папка_билдера_\Examples\DBTasks\CtrlGrid
Борланд Билдер с++ 6.0.
Если нету могу на почту кинуть...

Есть подозрения, что 6 билдер соответсвует 7 Дельфи а я проверял на 5 и 6, а там точно не отображается Мемо, да я и не увидел там Мемо. Упакуй испходники и екзешник с базами н-р винасей или раром 3 чтобы поменьше было в размере и скажи отправь на shiva_destroyer (C) mail.ru я посмотрю.
Автор: Arion
Дата сообщения: 18.05.2004 04:56

Цитата:
Есть подозрения, что 6 билдер соответсвует 7 Дельфи а я проверял на 5 и 6

На седьмом тоже не отображается. Я вообще сильно сомневаюсь что они переписывают эти компоненты от версии к версии, ибо каждый раз глюки все те же.
Автор: ShIvADeSt
Дата сообщения: 18.05.2004 05:17

Цитата:
На седьмом тоже не отображается. Я вообще сильно сомневаюсь что они переписывают эти компоненты от версии к версии, ибо каждый раз глюки все те же.

Тогда почему в билдере вместо слова Мемо пишется нормальный текст? Сразу трудно сказать, надо сорцы посмотреть и саму базу.
Автор: Thomas78
Дата сообщения: 18.05.2004 07:02
А независит ли это от типа полей в БД?
Поле мемо появляется когда тип поля в БД string?
Автор: ShIvADeSt
Дата сообщения: 18.05.2004 07:24

Цитата:
Поле мемо появляется когда тип поля в БД string?

Нет конечно. Можно конечно заставить строку выводиться в Мемо, но вот мемо в строку нет. Только что получил твой пример (кстати ты писал про Ctrlgrid, а прислал Dberrors) так вот там ни в одной базе данных не используется мемо) Покрайней мере у меня (я забыл про одну особенность билдреа когда просил выслать сорцы, екзешник не запустится без bpl, которых естессно у меня нет. Но я взял такой же проект и теже базы нет там Мемо ). Посмотри у себя начинку используемых баз, там гденить естьмемо?
Автор: Thomas78
Дата сообщения: 19.05.2004 15:13
ShIvADeSt


Цитата:
так вот там ни в одной базе данных не используется мемо


млин... я что-то не понимаю... Что значит не используется мемо?
В MSSQL у меня тип поля string, он выводиться как Memo... У меня значит тоже не используется мемо...
Автор: Arion
Дата сообщения: 19.05.2004 17:08

Цитата:
Тогда почему в билдере вместо слова Мемо пишется нормальный текст?

Проверял - не пишется, точно также он, паразит, пишет (MEMO) для полей типа string и text. Думаю, что если преобразовать тип поля например в nvarchar[500], проблема будет разрешена, хотя на 100 % сказать не могу.
Автор: Thomas78
Дата сообщения: 20.05.2004 06:31
Arion


Цитата:
Думаю, что если преобразовать тип поля например в nvarchar[500], проблема будет разрешена, хотя на 100 % сказать не могу.


Поставил, запустил проджект, попросил исправить тип с ftmemo на ftWideString, исправил... Теперь выводит WideString...



Автор: ShIvADeSt
Дата сообщения: 20.05.2004 08:14
Вот как отобразить в DBGrid содержимое мемо. Случайно нашел в ФАКе

Цитата:

implementation

{$R *.DFM}

function GrabMemoAsString(TheField: TMemoField): string;
var
Buffer: PChar;
MemSize: Integer;
begin
if TheField.IsNull then
Result := ''
else
with TBlobStream.Create(TheField, bmRead) do
begin
MemSize := Size;
Inc(MemSize); {Make room for the buffer's null terminator.}
Buffer := AllocMem(MemSize); {Allocate the memory.}
Read(Buffer^,MemSize);
Free;
Result:=Buffer;
FreeMem(Buffer, MemSize);
while Pos(#10, Result) > 0 do
Result[Pos(#10, Result)] := ' ';
while Pos(#13, Result) > 0 do
Result[Pos(#13, Result)] := ' ';
end;
end;


procedure TForm1.Table1NotesGetText(Sender: TField; var Text: String;
DisplayText: Boolean);
begin
Text := GrabMemoAsString(TMemoField(Sender));
end;


на С думаю сможешь сам перевести Правда весь текст в одну строку, но это лучше чем надпись Мемо.

Страницы: 1

Предыдущая тема: Вопросы про .NET


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.