Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Круглый стол
  
Правила КС
>> Настройки

Фильтр вопросов
>> Новые вопросы
отслеживать по
>> Новые ответы

Избранное

Страница вопросов
Поиск по КС


Специальные проекты:
>> К л ю к в а
>> Г о л о в о л о м к и

Вопрос №

Задать вопрос
Off-topic вопросы

Помощь

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  05:51[Войти] | [Зарегистрироваться]
Ответ на вопрос № 60935

04-04-2008 01:08
Доброе Утро,

Проблема с Юникод (Delphi 6 +ADOStoredProc+TNTEdit+MS SQL 2005)

Ситуация следующая.

Создал хранимую процедуру
USE [B_Trip]
GO
/****** Объект: StoredProcedure [dbo].[insert_proc] Дата сценария: 04/05/2008 08:54:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[insert_proc]
@t NVARCHAR(256)
AS
Insert Into Departament (D_Name) Values(@t)

Пользуясь компонент AdoStoredProc и TNTEdit вставляю в базу запись.Код Следующий

DMF.STR_SP.Parameters.ParamByName('@t').Size:=0;
DMF.STR_SP.Parameters.ParamByName('@t').DataType:=ftWideString;
DMF.STR_SP.Parameters.ParamByName('@t').Value:=STRF.TntEdit1.Text;
DMF.STR_SP.Prepared;
DMF.STR_SP.ExecProc;

Если в Windows-е поменять язык на Азербайджанский в "Выберите язык ,соответствующий языку используемых программ, которые не поддерживают Юникод" то все работает нормально.
А если оставить Русским то в базу сохраняться не то что нужно вместо U-U ,O-O и т.д. и т.п.
Поменять настройки Windows я не могу так как у нас все программы на русском

[+] Добавить в избранные вопросы

Отслеживать ответы на этот вопрос по RSS

Ответы:


Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице.
Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.

08-04-2008 02:41
Ну да. В Express'е вроде бы нет. Есть в SQL Developer Edition. Думаю, фирма сможет выделить ~60 долларов на лицензионную...

08-04-2008 00:24 | Комментарий к предыдущим ответам

Это утилита для мониторинга SQL-сервера.
Пуск->Программы->Microsoft SQL Server->Profiler

У меня Express Edition бесплатная версия там по моему нету ,я прав?

08-04-2008 00:21
Вопрос был решен установкой Delphi 7 + перезагрузка:)
Всем спасибо

07-04-2008 01:58
Можешь подсказать что такое Profiler??
Это утилита для мониторинга SQL-сервера.
Пуск->Программы->Microsoft SQL Server->Profiler

04-04-2008 10:19 | Комментарий к предыдущим ответам
Через - Среда SQL Server Management Studio Express  запросом
и когда через свою программу читаю записанные данные тоже самое
Можешь подсказать что такое Profiler?? Буду очень благодарен

04-04-2008 09:43
А если оставить Русским то в базу сохраняться не то что нужно вместо U-U ,O-O и т.д. и т.п.
Как ты это определил?
Profiler'ом посмотри, что идет на сервер.

04-04-2008 09:11 | Комментарий к предыдущим ответам
Создал хранимую процедуру
USE [B_Trip]
GO
/****** Объект: StoredProcedure [dbo].[insert_proc] Дата сценария: 04/05/2008 08:54:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[insert_proc]
@t NVARCHAR(256)
AS
Insert Into Departament (D_Name) Values(@t)

Пользуясь компонент AdoStoredProc и TNTEdit вставляю в базу запись.Код Следующий

как мне посоветовал ты

Var
P: _Parameter;
begin
P:=DMF.STR_SP.Parameters.ParamByName('@t').ParameterObject;
P.Size:=256;
P.Type_:=adVarWChar;
P.Value:=STRF.TntEdit1.Text;
DMF.STR_SP.ExecProc;

Если в Windows-е поменять язык на Азербайджанский в "Выберите язык ,соответствующий языку используемых программ, которые не поддерживают Юникод" то все работает нормально.
А если оставить Русским то в базу сохраняться не то что нужно вместо U-U ,O-O и т.д. и т.п.
Поменять настройки Windows я не могу так как у нас все программы на русском

04-04-2008 08:18 | Вопрос к автору: запрос дополнительной информации
Эффект с пробелами исчез но все равно юникод не работает.
А поконкретнее? Что теперь не работает?

04-04-2008 07:02 | Комментарий к предыдущим ответам
Эффект с пробелами исчез но все равно юникод не работает.
Ошибка
Parameter objectis  is Improperly defined incossitent or incomplete information was provided
тоже исчезла правда я установил седьмую версию Дельфи

04-04-2008 06:42
если P.Size=256 то

Потому что если я сайз не буду обнулять то он записывает строку в базу той длины которой была старая запись.Ну например
если я сохранил в базу 'ASDFGHJKLZ' 10 симфолов
а потом еще запись на пять симфолов то он в базу запишить пять симфолов + пять пробелов


А ты проверь еще раз.
Это был побочный эффект того самого бага. Для строковых полей длину надо указывать обязательно. Если обнулить - уже сам знаешь, что получится.

04-04-2008 06:35 | Сообщение от автора вопроса
неа не используеться
просто так было и я ничего не стал стирать

04-04-2008 06:15 | Вопрос к автору: запрос дополнительной информации
С Адо я начал несколько дней работать и этот кусок
try
  //...
except
  ExeProc:=DMF.STR_SP.Parameters.ParamValues['@returnValue']; // ???
end;
я взял с интернета.А что там не правильного?


Непонятно, зачем нужно значение ExeProc. Оно потом используется?

04-04-2008 05:53
С Адо я начал несколько дней работать и этот кусок
try
  //...
except
  ExeProc:=DMF.STR_SP.Parameters.ParamValues['@returnValue']; // ???
end;
я взял с интернета.А что там не правильного?

04-04-2008 05:51
если P.Size=256 то

Потому что если я сайз не буду обнулять то он записывает строку в базу той длины которой была старая запись.Ну например
если я сохранил в базу 'ASDFGHJKLZ' 10 симфолов
а потом еще запись на пять симфолов то он в базу запишить пять симфолов + пять пробелов

04-04-2008 04:02 | Вопрос к автору: запрос дополнительной информации
Спрошу немного не в тему. А зачем в except получать значение, возвращаемое процедурой?

try
  //...
except
  ExeProc:=DMF.STR_SP.Parameters.ParamValues['@returnValue']; // ???
end;


04-04-2008 03:57
Исправь:

P.Size:=256; //или какой там у тебя размер поля?


Да и Prepared тут лишнее. Тем более в таком виде.

04-04-2008 03:29 | Комментарий к предыдущим ответам
написал вот так
procedure TSTRF.TntButton1Click(Sender: TObject);
Var
ExeProc:Integer;
P: _Parameter;
begin
try
P:=DMF.STR_SP.Parameters.ParamByName('@t').ParameterObject;
P.Size:=0;
P.Type_:=adVarWChar;
P.Value:=STRF.TntEdit1.Text;
DMF.STR_SP.Prepared;
DMF.STR_SP.ExecProc;
except
ExeProc:=DMF.STR_SP.Parameters.ParamValues['@returnValue'];
end;
выдает ошибку
Parameter objectis  is Improperly defined incossitent or incomplete information was provided

04-04-2008 02:42
N тут не причем. Это баг Борланда: http://qc.borland.com/qc/wc/qcmain.aspx?d=1468 исправленный только в 7-й Delphi.
Обойти можно так:

uses ADOInt;
...
var
  P: _Parameter;
...
P:=DMF.STR_SP.Parameters.ParamByName('@t').ParameterObject;
P.Type_:=adVarWChar;
P.Value:=STRF.TntEdit1.Text;


04-04-2008 01:46 | Сообщение от автора вопроса
Понятно
а в данном сдучае куда мне N вписать?
куда не вписываю дает ошибку

Insert Into Departament (D_Name) Values(@t)????

04-04-2008 01:40
Если необходимо явно указать тип символьной строки как Unicode, то перед строкой ставиться символ "N". Если его неуказать то сервер предполагает что строка указана не в Unicode.
SET @t = N'строка в стандарте Unicode'.

Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
"Мы с тобой одной крови — ты и я!". Чьи это заветные слова?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.
Тип сообщения:
Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве

    Страница избранных вопросов Круглого стола.
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования