|
Тема
|
как с adotable да създам временна таблица в MSSQL
|
|
Автор | freaa (Нерегистриран) |
Публикувано | 14.11.06 00:06 |
|
var
AdoTableTemp: TADOTable;
begin
ADOTable1.ConnectionString := 'Provider=SQLOLEDB.1;'+
'Password=r9p5zh;'+
'Persist Security Info=True;'+
'User ID=sa;'+
'Initial Catalog='+Edit3.Text+';'+
'Data Source=sqldb';
ADOTable1.Close;
ADOTable1.TableName := Edit1.Text;
try
ADOTable1.Open;
except
on E:Exception do begin
MessageDlg('Error Opening Table ' + E.ClassName, mtError, [mbOK], 0);
ShowMessage(E.Message);
end;//on
end;//try
try
AdoTableTemp := TADOTable.Create(nil);
AdoTableTemp.ConnectionString := 'Provider=SQLOLEDB.1;'+
'Password=r9p5zh;'+
'Persist Security Info=True;'+
'User ID=sa;'+
'Initial Catalog=tempdb;'+
'Data Source=sqldb';
//AdoTableTemp.Close;
AdoTableTemp.FieldDefs := ADOTable1.FieldDefs;
AdoTableTemp.TableName := 'dbo.temp1';
{ Call the CreateTable method to create the table }
{ как с adotable да създам временна таблица в MSSQL server }
AdoTableTemp.CreateTable;
AdoTableTemp.Open;
finally
ADOTable1.Free;
end;
end;
| |
Тема
|
Re: как с adotable да създам временна таблица в MSSQL
[re: freaa]
|
|
Автор | Ивaнчo (Нерегистриран) |
Публикувано | 14.11.06 09:23 |
|
Всяка една таблица създадена в SQL 2000, която е с префикс #, например #MyTempTable, е временна.
SQL 2000 потдържа два вида временни таблици - локални и глобални.
Локалните са видими само за сесията която ги е създала.
Глобалните - досещай се сам.
Локалните се разрушават автоматично при затваряне на сесията, процеса, който ги е създал.
Глобалните - когато сесията която ги е създала завърши, и всички останали процеси престанат да я използват.
Локалните се създават като префикса # е един, глобалните - префикса се повтаря, т.е. е ## Например:
#LocalTempTable
##GlobalTempTable
Използвай Command: _Command; // uses AdoInt
Command._Set_ActiveConnection(ConnectionString);
Command.CommandType := adCmdText;
Command.CommandText := 'CREATE TABLE #MyLocalTable (Colona1 INT PRIMARY KEY)';
Command.Execute(VarRecsAffected, EmptyParam, adCmdText); // VarRecsAffected:OleVariant
| |
Тема
|
Re: как с adotable да създам временна таблица в MSSQL
[re: Ивaнчo]
|
|
Автор | freaa (Нерегистриран) |
Публикувано | 14.11.06 11:17 |
|
пич много ти благодаря за отговора.
Но въпроса ми беше. Как това да стане с AdoTable?
Защо с него. Ако забелязваш кода, който съм дал... какво прави той.
Отваря някакъв тайбъл и после криейтва друг Тable обект от същия тип -adotable. Преди да отвори новия обект взима всички дефиниции на стария. По този начин ако има физически Table (който по принцип се създава с CreateTable-но само за BDE важи тази команда трябва при отварянето на новия да се създаде автоматично същия като стария само, че без данни естествено.)
Не искам всеки път да описвам колони типове и размери.
Това си е жива загуба на време. Има или няма възможност с три реда както си му е думата да стане това. Ами ако тейбъла ми има 300 колони от различен вид и размер. Абах мама му. Аз по хубаво въобще да не създавам временни тайбъли.
Има ли начин или няма?
| |
Тема
|
Re: как с adotable да създам временна таблица в MSSQL
[re: freaa]
|
|
Автор | frea (Нерегистриран) |
Публикувано | 14.11.06 17:42 |
|
пак да си отговоря сам.
Явно това става само с ADOX. Така ли е?
Е свършиха се мастарите. Всичките утидоха по Европата.
| |
Тема
|
Re: как с adotable да създам временна таблица в MSSQL
[re: frea]
|
|
Автор | Ивaнчo (Нерегистриран) |
Публикувано | 15.11.06 10:00 |
|
Отговор в същия дух
Няма нищо *пич*, ще се научиш. Това че искаш да става с TAdoTable, не означава, че може да стане с него. Имаш код, работещ е, ако искаш - използвай го, ако не - няма да се гръмна я. Пък за таблица с 300 колони... Аз бих се отказал от програмирането, направо ще се пробвам да продавам банички, ако някой ми каже че трябва да използвам таблица с повече от 10-на, макс 15-на колони... Има дебели книги, там пише нещо за нормализация и денормализация...
Както и да е, щом трябва - и 300 колони нека да са...
| |
Тема
|
Re: Втори отговор в същия дух
[re: freaa]
|
|
Автор | Ивaнчo (Нерегистриран) |
Публикувано | 15.11.06 10:15 |
|
Втори отговор в същия дух
Ами готин, SQL2000 , потдържа синтаксиса - SELECT INTO
След като става въпрос за създаване на копие на таблица, използвай този израз, и го изпълни с един Command обект
SELECT * INTO NewTempTable FROM OriginalTable WHERE 1=-1
Това ще ти създаде празно копие на таблицата, но без разните му там индекси
Ако искаш наистина да е временна таблица само за сесията, сложи и едно # отпред, т.е да стане #NewTempTable
| |
Тема
|
Re: Втори отговор в същия дух
[re: Ивaнчo]
|
|
Автор | фpea (Нерегистриран) |
Публикувано | 16.11.06 03:33 |
|
благодаря пич.
Дано поне ключовете ги създава :)
| |
Тема
|
Re: как с adotable да създам временна таблица в MSSQL
[re: Ивaнчo]
|
|
Автор | фpea (Нерегистриран) |
Публикувано | 16.11.06 10:53 |
|
thank you :)
| |
|
|
|
|