PDA

View Full Version : اجرای کوئری هایی که توی سرور می نویسیم از داخل دلفی



ariobarzan
پنج شنبه 10 دی 1394, 09:14 صبح
با سلام
من توی سرور sql بعضی وقت ها کوئری می نویسم و نتیجه اون را هم که همونجا می بینم
حالا میخوام این کار را از توی دلفی انجام بدم
مشکل اینه که دستورات کوئری زیاده و نمی دونم چطور اونها را بنویسم که اجرا بشه
با Memo و RichEdit هم امتحان کردم و نشد
کاری که انجام میدم اینه که دستورات را در memo کپی می کنم و بعد ADOQuery1.SQL.Text را معادل متن memo میزارم و بعد هم اجرای کوئری ولی اجرا با خطا انجام میشه
راه حلش چیه؟
ممنون

fahimi
پنج شنبه 10 دی 1394, 13:04 عصر
با سلام راهای مختلفی وجود دارد
1- Query1.Sql.Add('');
را در چند خط واردکنی
2- در محیط سرور stored procedure ایجاد کنی و در محیط دلفی آن را فرا خوانی کنی.

ariobarzan
جمعه 11 دی 1394, 12:41 عصر
میخوام مثل صفحه Query توی SQL Server باشه
یک Memo یا RichEdit برای نوشتن دستورات و یک Button برای اجرا

یوسف زالی
یک شنبه 13 دی 1394, 09:42 صبح
خب مشکلتون کجاست؟
یک ADOQuery بگذار و محتویات Memo رو در SQL اون بریز و اون رو اجرا کن.

ariobarzan
پنج شنبه 17 دی 1394, 14:41 عصر
نمیشه
خطا میده
همون کد توی کوئری sql Server بدون خطا کار میکنه

USE [DatabaseName]
GO
CREATE TABLE #temp (
table_name sysname ,
row_count INT,
reserved_size VARCHAR(50),
data_size VARCHAR(50),
index_size VARCHAR(50),
unused_size VARCHAR(50))
SET NOCOUNT ON
INSERT #temp
EXEC sp_msforeachtable 'sp_spaceused ''?'''
SELECT a.table_name,
a.row_count,
COUNT(*) AS col_count,
a.data_size
FROM #temp a
INNER JOIN information_schema.columns b
ON a.table_name collate database_default
= b.table_name collate database_default
GROUP BY a.table_name, a.row_count, a.data_size
ORDER BY CAST(REPLACE(a.data_size, ' KB', '') AS integer) DESC
DROP TABLE #temp

این را توی سرور مینویسم که به من سایز جدولهای بانک را بده که خب کار می کنه
ولی همینو میزارم توی memo و منتقل میکنم توی کوئری خطا میده البته بجای DatabaseName اسم بانک باید نوشته بشه
پیام خطایی هم که میده اینه incorrect syntax near GO
قبل از اجرای کوئری هم با showmessage کد را میبینم عینا همونه که تو سرور اجرا میکنم

یوسف زالی
پنج شنبه 17 دی 1394, 23:47 عصر
خب معلومه که باید ارور بده، مگر Go دستوره؟
اون کلمه Batch Separator هست و دستور نیست، وقتی دیتابیستون معلومه، نیازی نیست اون رو یوز کنید.
راهکار اینه که یک SP بسازید و از دلفی اون رو اجرا کنید.

ariobarzan
جمعه 18 دی 1394, 01:09 صبح
حق با شما بود
دو خط اول را حذف کردم درست شد
ممنون:تشویق::تشویق: