【问题标题】:Access to Access Transfer访问访问转移
【发布时间】:2011-07-20 01:48:36
【问题描述】:

我在这里匆忙问了几个问题,但我没有快速取得进展,我一直在改变事情,只是以不同的问题结束,并且不知道是什么原因造成的。我是一名 PHP MYSQL 人,我必须通过 COM 类使用 Access。

基本上,客户端有多个服务器,每个服务器都有一个访问数据库,每个服务器都有一个 CMS,这些表应该包含相同的数据并且已经不同步。我的工作是想出一种重新同步它们的方法。

我已经开始将数据放入一个数组中,对其进行序列化并将其保存到主服务器上的一个文件(所有服务器都应该同步到),然后在其他服务器上,下载文件,对其和项目进行反序列化按项目,检查它是否在数据库中,如果没有插入它。插入失败。我尝试为每个项目构建一个 sql 查询并执行 $this->conn->Execute();这在愚蠢的事情上逐行失败,所以我现在正在尝试这个:

function syncCMS()
    {
       $this->output['msg'] .= "<p><b>The following properties were added to the database on ." . $this->hsite . "</b></p>";
       $this->get_field_names();
       $this->make_connection(); //assigns connection to $this->conn
        $rs = new COM('ADODB.Recordset');
        $rs->CursorType = 2;
        $rs->CursorLocation = 1;
        $rs->LockType = 4;
        $rs->Open($this->table_name,$this->conn);
        foreach ($this->awayPropertyDetails as $key => $property)
        {
            $this->check_for_property($property['pname']);
            if (!$this->property_exists || $this->mode == "fullSync")
            {
               unset($values);
               $bfields = array("pshow","rent","best", "oda1",  "oda2", "oda3", "oda4", "oda5", "oda6", "odap", "topool","tomountain","tofitness","tosauna"); //stores the yes/no values
               $q = "INSERT INTO " . $this->table_name . " (" . $this->dbfields . ") VALUES (";
                foreach ($property as $k => $value)
                {

                    if ($k == "Kimlik") {
                        $value = null;
                    }
                    if ($k == "tarih")
                    {
                        $value = date("d/m/Y");
                        $value = "'" . $value . "'";
                    }
        if (in_array($k,$bfields))
                {
                   if ($value == "")
                   {
                       $value = 'FALSE';
                   }
                   else 
                   {
                       $value = 'TRUE';
                   }
                }
                     $rs->fields->$k = $value;
$this->output['msg'] .= $property['pname'] . " added";
                }

        $rs->BatchUpdate();
                $rs->Close();
                $this->conn->Close();
               //$this->download_images($property['OBJECT_NR'],$k);
                //$this->output['msg'] .= "<p>Images added</p>";

            }


       }
$message .= "</ul>";
$this->output['msg'] .= $message;
        $this->sendOutput();
        //print_r($property);*/
    }

得到这个:

致命错误:未捕获的异常“com_exception”带有消息“无法查找“Kimlik”:未知名称。 ' 在 D:\inetpub...

Kimlik 是第一个字段的名称,Auto Number 字段,我把它拿出来,问题转移到了第二个字段。

【问题讨论】:

  • 你能用 ODBC 代替 COM 对象吗?如果是这样,您可能会发现use PDO's ODBC support 更容易,它应该始终在 PHP 的 Windows 版本中可用。
  • 我认为查尔斯应该将他的答案作为答案提出来。使用查尔斯的建议将迫使提问者进入“访问方式”,这在这种情况下可能是最好的(虽然不方便)。

标签: php ms-access com adodb


【解决方案1】:

我到了那里:

$sql = "SELECT * FROM " . $this->table_name;
if (!$this->property_exists || $this->mode == "fullSync")
            {
               $this->make_connection();
               $rs->Open($sql,$this->conn);
              $rs->addnew();
               foreach($rs->Fields as $field)
               {
                   if ($field->name != "Kimlik")
                   {
                   $rs->Fields[$field->name] = $property[$field->name];
                   }
               }

              $rs->Update();
              $rs->Close();
              $this->conn->Close();

               $msg = $this->download_images($property['OBJECT_NR'],$k);
               $this->output['msg'] .= $property['pname'] . " added<br/>" . $msg . "<br/><br/>";

            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 2018-07-29
    • 2019-09-25
    • 1970-01-01
    • 2021-02-18
    • 2015-12-16
    • 1970-01-01
    相关资源
    最近更新 更多