كيف يمكنني استخدام معلمة في طلب البيانات الخارجية إكسل؟

StackOverflow https://stackoverflow.com/questions/612664

  •  03-07-2019
  •  | 
  •  

سؤال

ويمكنني استخدامها بالفعل إكسل (2007) لاستيراد البيانات من SQL Server 2005. وإضافة اتصال بيانات وأنا أدخل استعلام SQL مخصص يقوم باسترداد البيانات المطلوبة بلدي. بارد.

ولكن ما أود أن أضيفه هو القدرة على بالحدود هذا الاستعلام على أساس القيمة الموجودة في خلية تعرف على جدول البيانات.

وسيكون لي الاستعلام تذهب من

SELECT * FROM dbo.MyDataTable WHERE Col1 = 'apples'

وإلى شيء من هذا القبيل

SELECT * FROM dbo.MyDataTable WHERE Col1 = 'Cell("B2")'

هل هذا ممكن؟ إذا كان الأمر كذلك، كيف؟

هل كانت مفيدة؟

المحلول

إذا كنت باستخدام MS سؤال للحصول على البيانات إلى Excel، هذه الصفحة العروض كيفية استخدام قيمة من خلية في ورقة العمل كمعلمة في الاستعلام الخاص بك.

نصائح أخرى

وحاول هيكلة التعليمات البرمجية الخاصة بك كما يلي:

Dim strSQL as String
Dim strFruit As String

strFruit = CStr(ThisWorkbook.Sheets("Sheet1").Range("A1").FormulaR1C1)

strSQL = "SELECT * FROM dbo.MyDataTable WHERE Col1 = '" & strFruit & "'"

ولقد وجدت أنه من المفيد لتحميل المعلمة إلى متغير أولا، قبل دمجه في استعلام SQL.

ويجعل سلسلة SQL الخاصة بك أكثر قابلية للقراءة ويسمح لك للتحقق / تنظيف المعلمة قبل استخدامه.

لم أكن باستخدام إكسل 2007، ولكن في الإصدارات السابقة من Excel أنا حقا يكرهون التكامل استعلام SQL. وعلى وجه الخصوص لقد وجدت أنه من الصعب أن تفعل بالضبط ما تسأل عن دون اللجوء إلى القرصنة معا مجموعة من التعليمات البرمجية VBA. لقد قمت ببعض البحوث وأخيرا قرر استخدام الاستعلام إكسل روب فان جيلدر نضيف في:

http://vangelder.orconhosting.net.nz/excel/queryeditor.html

والقسم "المعلمات" في واجهة المستخدم الرسومية له يسمح لك لانشاء معلمة ولها فائدة إما مطالبة المستخدم لقيمة أو سحب القيمة من مرجع خلية. وأعتقد أن هذا الأخير هو بالضبط ما تريد القيام به. كما أن لديها القدرة على التحديث التلقائي عند تغيير قيمة الخلية. يمكنني استخدام وظيفة التحديث التلقائي الكثير عند التحقق من صحة البيانات في بلدي DB.

ولقد كان اثنين من الحالات التي أصبحت الاستفسارات بلدي الفاسدة وأنا لم يعد يمكن فتحها أو الاطلاع على النص. ونتيجة لذلك، فإنني أوصي حفظ علامة تبويب في جداول اكسل لاستفساراتكم ونسخ النص من الاستعلامات إلى خلايا على تلك الصفحة الخاصة. وبهذه الطريقة إذا كانت أداة الاستعلام يأكل الاستفسارات الخاصة بك وسوف لا يكون لديك إلى إعادة بنائها من الصفر.

وهناك أداة طرف ثالث، ولو مجانا، قد لا يكون ما كنت تبحث عنه، لكنه يعمل بشكل جيد بالنسبة لي. حظا سعيدا!

Dim SQLString as String

SQLString = "SELECT * FROM dbo.MyDataTable WHERE Col1 = '" & Cells("B2") & "'"

وسيكون من المفيد النظر في هجمات SQL حقن لرؤية الجوانب السلبية لهذا النهج، ولكن قد لا يكون بالضرورة النظر عن ما عليك القيام به

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top