Перейти к содержимому

Фотография

Работать с БД


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 36

#1 DenDer

DenDer

    Новый участник

  • Members
  • Pip
  • 2 сообщений
  • ФИО:Самила Александр Николаевич

Отправлено 22 июля 2005 - 10:53

Здравствуйте!

В документации написано, что ТС предоставляет возможность работать с АДО.

Вот я пытаюсь записать в базу несколько строк.

А ничего не получается:

Делаю на основе примера из хелпа
' Create a new Connection object
  Set AConnection = ADO.CreateConnection
  ' Specify the connection string
  AConnection.ConnectionString = "PIntegrated Security=SSPI;Bind Flags=0;Data Source=DensTest;Provider=ADsDSOObject;Mode=Read;Location=samila;Encrypt Password=False"
  ' Activate the connection
  AConnection.Open
  ' Create a new Command object
  Set Cmd = ADO.CreateCommand
  ' Specify the connection
  Cmd.ActiveConnection = AConnection
  ' Specify command type and text
  Cmd.CommandText = "insert into Moon(id, str) values(MyParam,'fff')"
  Cmd.CommandType = adCmdText
  ' Create a new parameter
  Set Prm = Cmd.CreateParameter("MyParam", adInteger, adParamInput)
  Cmd.Parameters.Append Prm
  ' Specify the parameter value
  Prm.Value = 1940


 Set RecSet = Cmd.Execute 'Здесь ошибка

  AConnection.Close


Возможно, это из-за провайдера - в примере сделано для файла, лежащего на диске локально, а у меня база на серваке.

И еще вопрос, как создать параметр типа строка?
  • 0

#2 Dmitry N

Dmitry N

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 22 июля 2005 - 15:16

Здравствуйте.

AConnection.ConnectionString = "PIntegrated Security=SSPI;Bind Flags=0;Data Source=DensTest;Provider=ADsDSOObject;Mode=Read;Location=samila;Encrypt Password=False"

Может "Integrated Security=SSPI"?
  • 0
С уважением,
Дмитрий

#3 DenDer

DenDer

    Новый участник

  • Members
  • Pip
  • 2 сообщений
  • ФИО:Самила Александр Николаевич

Отправлено 25 июля 2005 - 07:22

Странный у них хелп.
Он не совпадает с той обьектной моделью, которая у них представлена.

Метод Execute есть только у соединения, созданного через CreateADOConnection :rtfm:

но у этого обьекта уже нет свойства ActiveConnection :diablo:

Мда, странно однако
  • 0

#4 Dmitry N

Dmitry N

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 26 июля 2005 - 11:03

Здравствуйте.

Метод Execute есть только у соединения, созданного через CreateADOConnection  :rtfm:
но у этого обьекта уже нет свойства  ActiveConnection  :diablo:
Мда, странно однако

Хм. Вы так решили, потому что в хелпе это не описано? Метод Execute есть у объекта, возвращаемого методом ADO.CreateCommand. Да и свойство ActiveConnection у объекта CreateADOConnection есть. Это можно проверить методом BuiltIn.IsSupported:

Log.Message(IsSupported(ADO.CreateConnection, "ActiveConnection"))
Log.Message(IsSupported(ADO.CreateCommand, "Execute"))
Судя по информации из топика 'ADO Object', объекты ADO в TestComplete унаследованы от аналогичных дельфовых объектов. То есть, полную документацию по этим объектам можно найти в помощи Delphi.

Да, а вы можете проверить используемый ConnectionString используя какой-нибудь другой способ? Не сказать, что я много пользовался плагином ADO, но проблем у меня с ним не возникало.
  • 0
С уважением,
Дмитрий

#5 Rost

Rost

    Постоянный участник

  • Members
  • PipPipPip
  • 241 сообщений
  • ФИО:Rostyslav Boruk
  • Город:Украина, Киев

Отправлено 11 мая 2006 - 10:03

Здравствуйте!

В документации написано, что ТС предоставляет возможность работать с АДО.

Вот я пытаюсь записать в базу несколько строк.

А ничего не получается:


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

Помочь не помог, но проблема стала уже. :aggressive:
  • 0
Ростислав Борук,
Консультант по процессам тестирования

#6 Lexuses

Lexuses

    Новый участник

  • Members
  • Pip
  • 13 сообщений

Отправлено 11 мая 2006 - 11:14

У меня таже проблема, кто то может показать готовый действительно РАБОЧИЙ пример как записать, хоть что то в БАЗУ????? :aggressive: :diablo: :focus:
  • 0

#7 Гость_samsung_*

Гость_samsung_*
  • Guests

Отправлено 11 мая 2006 - 11:15

Привет, сейчас пытаюсь записать в базу при помощи этого же примера (через параметры). Но в моем коде ошибка пораньше

-Cmd.Parameters.Append Prm

у тебя были с этим проблемы? Есть подозрения, что это с Append что-то.

#8 objective

objective

    Новый участник

  • Members
  • Pip
  • 47 сообщений

Отправлено 19 мая 2006 - 15:44

Здравствуйте.
Записать в базу можно вот так

Function TestProc_ADO
  
  Set cmd = ADO.CreateADOCommand
  cmd.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;" & _ 
  "User ID=XXXX;Password=XXXX;Database=TestDB;Data Source=ServerName;" & _
  "Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;" & _ 
  "Workstation ID=ServerName;Use Encryption for Data=False;"& _
  "Tag with column collation when possible=False"
   
  cmd.CommandText = "INSERT INTO TestTable VALUES ('Test')"
  
  cmd.Execute
End function

Используется sql комманда, так что теперь нужно просто изучить sql query ;)
  • 0

#9 AlexP

AlexP

    Опытный участник

  • Members
  • PipPipPipPip
  • 406 сообщений
  • Город:Санкт-Петербург

Отправлено 24 сентября 2007 - 12:47

Всем привет!

Всегда использовал\использую SqlDataClient, теперь вот решил с ADO "повозиться":

//JScript
Conn = ADO.CreateConnection();
Conn.ConnectionString = "...";
Conn.Open();
var recordSet = Conn.Execute_("select * from Tab where col1 = 1");

На последней строчке получаю:
"Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another."

БД - MS SQL Server 2005
TC - 5.14
В чём может быть проблема?
  • 0

#10 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 24 сентября 2007 - 13:28

var recordSet = Conn.Execute_("select * from Tab where col1 = 1");


в этой строчке вы упростили код для простоты восприятия.
Приведите, пожалуйста, полный вариант, а не упрощенный
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#11 AlexP

AlexP

    Опытный участник

  • Members
  • PipPipPipPip
  • 406 сообщений
  • Город:Санкт-Петербург

Отправлено 24 сентября 2007 - 15:05

в этой строчке вы упростили код для простоты восприятия.
Приведите, пожалуйста, полный вариант, а не упрощенный


Будь добр на ты :)
Как раз последнюю строчку я и не упрощал.
  • 0

#12 AlexP

AlexP

    Опытный участник

  • Members
  • PipPipPipPip
  • 406 сообщений
  • Город:Санкт-Петербург

Отправлено 24 сентября 2007 - 15:23

Ошибка была в первой строчке: ADO.CreateADOConnection :blush:
  • 0

#13 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 24 сентября 2007 - 15:34

:)

погадаем на кофейной гуще тогда =)

1) поле col1 точно имеет тип int? может там строка? тогда надо вот так
var recordSet = Conn.Execute("select * from Tab where col1 = '1'");

2) еще можно попробовать использовать ADO.CreateADOCommand вместо ADO.CreateConnection
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#14 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 24 сентября 2007 - 15:35

Ошибка была в первой строчке: ADO.CreateADOConnection :blush:

хм
клево :lol:
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#15 AlexP

AlexP

    Опытный участник

  • Members
  • PipPipPipPip
  • 406 сообщений
  • Город:Санкт-Петербург

Отправлено 24 сентября 2007 - 15:46

хм
клево :lol:


Увы, типичная невнимательность :blush: Перепроверил код раз 10, как не заметил?! Радует, что прогулка на свежем воздухе позволила взглянуть на код "другими глазами" :) Но, если на каждый showstopper я буду отвечать часовой прогулкой, то...
Ещё раз спасибо, пункт 2 помог бы :lol:
  • 0

#16 Умница

Умница

    Новый участник

  • Members
  • Pip
  • 29 сообщений

Отправлено 10 июля 2008 - 18:17

Здравствуйте, Коллеги...
Есть проблема с вызовом хранимой функции в пакете.
TC 4.29
DelphiScript

В ТС функция такая:
function ...(aPARAMNAME_TC: string): string;
var
RecSet, Cmd: OleVariant;
Prm: string;
begin
try
Prm := '';
Prm := ExecuteSQLComand('declare SP_Rez varchar2(50); begin SP_Rez := PKI_StandardParam.GETSTANDARDPARAM(' +
'''' + aPARAMNAME_TC + '''' + '); end;');
except
...
end;
Result := Prm;
end;

ГДЕ:
function ExecuteSQLComand(const aComandText: String): string;
var
AConnection, RecSet, Prm, Cmd: OleVariant;
begin
Cmd := ADO.CreateCommand;
Cmd.ActiveConnection := g_ADOConnectionQA;
Cmd.CommandText := aComandText;
Cmd.CommandType := adCmdText;
RecSet := Cmd.Execute;
RecSet.Open;
Result := RecSet.GetString;
end;

На строчке "Result := RecSet.GetString" получаю такое ругательство: ADODB.Recordset Операция не допускается, если объект закрыт.

Почему он может быть закрыт? Доступ к серверу есть, в sql запрос работает. Что не так?
  • 0

#17 tom_13

tom_13

    Постоянный участник

  • Members
  • PipPipPip
  • 206 сообщений
  • Город:Киев

Отправлено 11 июля 2008 - 06:34

На строчке "Result := RecSet.GetString" получаю такое ругательство: ADODB.Recordset Операция не допускается, если объект закрыт.

Почему он может быть закрыт? Доступ к серверу есть, в sql запрос работает. Что не так?


Извените, но я не увидел где вы прсваиваете строку конекта
CMD.ConectionString - без нее ведь комплит не увидит куда конектится

Вот на всяк случай ссылочка сдесь есть строчки конекта к разным базам
  • 0

#18 Умница

Умница

    Новый участник

  • Members
  • Pip
  • 29 сообщений

Отправлено 11 июля 2008 - 07:42

На строчке "Result := RecSet.GetString" получаю такое ругательство: ADODB.Recordset Операция не допускается, если объект закрыт.

Почему он может быть закрыт? Доступ к серверу есть, в sql запрос работает. Что не так?


Извените, но я не увидел где вы прсваиваете строку конекта
CMD.ConectionString - без нее ведь комплит не увидит куда конектится

Вот на всяк случай ссылочка сдесь есть строчки конекта к разным базам


Перед запуском любой проц. делается инициализация в виде:

g_ADOConnectionQA := ADO.CreateConnection;
g_ADOConnectionQA.ConnectionString := 'Provider=' + g_Provider + ';Data Source='+ g_DataSource +
';User ID=' + g_UserID + ';Password=' + g_Password + ';';
g_ADOConnectionQA.Open;

Где п_Provider, g_DataSource, g_UserID, g_Password считываются из ini файла.

Потом делается так: Cmd.ActiveConnection := g_ADOConnectionQA;

Ее нужно открывать еще раз?
  • 0

#19 Умница

Умница

    Новый участник

  • Members
  • Pip
  • 29 сообщений

Отправлено 11 июля 2008 - 08:42

Пробовала делать так:

function ...(aPARAMNAME_TC: string): string;
var
AConnection, RecSet, Cmd, Prm: OleVariant;
begin
Cmd := ADO.CreateADOStoredProc; // Создаем новый Command object
Cmd.ConnectionString := 'Provider=Microsoft OLE DB Provider for ODBC Drivers;'+
'Data Source=...;User ID=...;'+'Password=...;';

Cmd.ProcedureName := 'PKI_StandardParam.GETSTANDARDPARAM';
Cmd.Parameters.Refresh;

Cmd.Parameters.ParamValues('aParamName') := aPARAMNAME_TC;
Cmd.ExecProc;
Prm := Cmd.Parameters.ParamValues('lParamValue');
result := Cmd.Parameters.ParamValues('RETURN_VALUE');
Log.Message(IntToStr(result) + ' ' + Prm);
end;

Ошибка такая: Parameter 'aParamName' not found
  • 0

#20 AlexP

AlexP

    Опытный участник

  • Members
  • PipPipPipPip
  • 406 сообщений
  • Город:Санкт-Петербург

Отправлено 11 июля 2008 - 09:37

На строчке "Result := RecSet.GetString" получаю такое ругательство: ADODB.Recordset Операция не допускается, если объект закрыт.


Я получал такую ошибку, но вот припомнить в связи с чем, увы, не могу :(
Попробуйте такой вариант:

//JScript
var AConnection,  RecSet;
AConnection = ADO.CreateADOConnection();
AConnection.ConnectionString = "Provider=SQLOLEDB.1; Persist Security Info=False; User ID = ...; Password = ...; Database = ...; Data Source = ...";
AConnection.LoginPrompt = false;
AConnection.Open(); 
RecSet = AConnection.Execute_(sqltext); 
RecSet.MoveFirst();  
while(!RecSet.EOF)
{
	Log.Message(RecSet.Fields(column_index).Value)
	RecSet.MoveNext();
}
AConnection.Close();

  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных