السلام عليكم :)
للذين يستخدمون برنامج ال jbuilder من borland ..وتعاملها مع ال DataSet ..بإمكانه الإستفادة من هذا الدرس.
بداية سأعرض ال Output النهائي:

الآن نقوم بعرض الكود بهذا ال Output :
import javax.swing.*;
import com.borland.dx.sql.dataset.*;
import com.borland.dx.dataset.*;
import com.borland.dbswing.*;
import java.awt.event.*;
import java.awt.*;
import com.microsoft.jdbc.sqlserver.*;
import com.microsoft.jdbcx.sqlserver.*;
import com.microsoft.util.*;
import java.sql.*;
public class LoadDataSet extends JFrame {
static boolean packFrame=false;
JPanel contentPane;
BorderLayout borderLayout1 = new BorderLayout();
JPanel jPanel1 = new JPanel();
com.borland.dx.dataset.TableDataSet tableDataSet1 = new com.borland.dx.dataset.TableDataSet();
JdbNavToolBar jdbNavToolBar1 = new JdbNavToolBar();
TableScrollPane tableScrollPane1 = new TableScrollPane();
JdbStatusLabel jdbStatusLabel1 = new JdbStatusLabel();
JdbTable jdbTable1 = new JdbTable();
//Construct the frame
public LoadDataSet() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch (Exception e) {
e.printStackTrace();
}
}
//Component initialization
private void jbInit() throws Exception{
contentPane = (JPanel) this.getContentPane();
this.setSize(new Dimension(500, 300));
this.setTitle("Welcome");
jPanel1.setLayout(borderLayout1);
contentPane.add(jPanel1, BorderLayout.CENTER);
contentPane.add(jdbStatusLabel1, BorderLayout.SOUTH);
jPanel1.add(jdbNavToolBar1, BorderLayout.NORTH);
jdbTable1.setDataSet(tableDataSet1);
jPanel1.add(tableScrollPane1, BorderLayout.CENTER);
tableScrollPane1.getViewport().add(jdbTable1);
tableDataSet1.setProvider(new ProviderImp());
}
//Overridden so we can exit when window is closed
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
class ProviderImp extends Provider
{
public void provideData(StorageDataSet dataSet,boolean toOpen) {
Database db = new Database();
QueryDataSet qds = new QueryDataSet();
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection(
"jdbc:odbc:Bassam", "sa", "bassam");
db.setJdbcConnection(con);
qds.setQuery(new QueryDescriptor(db, "select * from Employees", null, true,
Load.ALL));
qds.open();
DataSetData data = DataSetData.extractDataSet(qds);
dataSet.empty();
data.loadDataSet(dataSet);
}
catch (Exception e) {
System.out.print(e);
}
finally {
qds.close();
db.closeConnection();
}
}
}
public static void main(String[] args) {
LoadDataSet loadDataSet = new LoadDataSet();
if (packFrame) {
loadDataSet.pack();
}
else {
loadDataSet.validate();
}
// Center the frame
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = loadDataSet.getSize();
if (frameSize.height > screenSize.height)
frameSize.height = screenSize.height;
if (frameSize.width > screenSize.width)
frameSize.width = screenSize.width;
loadDataSet.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
loadDataSet.setVisible(true);
}
}لاتخاف الكود طويل لكنه سهل.. :D ..فطول الكود هو سببه ال Design ..
اما بالنسبه لأسطر الكود الخاصة بالدرس فهي كالتالي:
com.borland.dx.dataset.TableDataSet tableDataSet1 = new com.borland.dx.dataset.TableDataSet();
TableDataSet : كلاس يمثل جدول واحد في الذاكره..ليس مثل ال DataSet الذي عبارة عن واحد او مجموعة من الجداول..نقوم بعمل instanse منه ليكون مصدر الداتا(Data Source) ل JdbTable وهو يقوم بعرض الداتا على الفريم..وهذا وهو سطر الكود الذي يقوم بذلك:
jdbTable1.setDataSet(tableDataSet1);
ومن تم لابد من ملىء ال TableDataSet بالداتا وذلك عن طريق سطر الكود التالي:
tableDataSet1.setProvider(new ProviderImp());
ProviderImp :عبارة عن كلاس يورث من كلاس Provider الذي فيه دالة تقوم بعمل تزويد البيانات من قواعد البيانات..
اما بالنسبة للكلاس ProviderImp ففيه الدالة provideData التي تمرر كلاس من نوع StorageDataSet وهو الكلاس الذي سنملائه بالداتا من الكلاس DataSetData...كما في الكود التالي:
DataSetData data = DataSetData.extractDataSet(qds); dataSet.empty(); data.loadDataSet(dataSet);
qds :وهو الكلاس الذي يقوم بغسترجاع البيانات من قاعدة البيانات بواسطة ال sql..كما في الكود التالي:
qds.setQuery(new QueryDescriptor(db, "select * from Employees", null, true, Load.ALL));
db: وهو عبارة عن database connection الذي من خلاله نربطه مع قاعدة البيانات..كما في الكود التالي:
db.setJdbcConnection(con);
con: وهو كائن من الكلاس المعروف Connection للربط مع Database ..
وإن شاء الله يكون الدرس مفهوم..
بالتوفيق إن شاء الله..
